ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pandas高级数据分析快速入门之数据筛选——分组排序筛选实践笔记

2021-10-08 18:00:30  阅读:197  来源: 互联网

标签:数据分析 10 df 百米 马拉松 分组 24 筛选 Pandas


首先,读取文件。

import pandas as pd
import datetime
df = pd.read_excel('sport.xlsx')
df['birthday'] = df['birthday'].astype('datetime64')
df
idnameageGendersportbirthday
01001董国建34马拉松1987-03-16
11002苏炳添31百米1989-08-29
21003彭建华24马拉松1996-12-18
31004张德顺25马拉松1996-02-21
41005焦安静25马拉松1995-09-03
51006葛曼棋24百米1997-10-13
61007吴智强27百米1994-04-13
71008谢震业28百米1993-08-17
81009梁小静24百米1997-04-07
91010韦永丽30百米1991-10-11
101011仁青东知布20马拉松2000-10-15
111012张新艳27马拉松1994-02-01

1. 排序

df = df.sort_values(by='birthday',ascending=True)
df
idnameageGendersportbirthday
01001董国建34马拉松1987-03-16
11002苏炳添31百米1989-08-29
91010韦永丽30百米1991-10-11
71008谢震业28百米1993-08-17
111012张新艳27马拉松1994-02-01
61007吴智强27百米1994-04-13
41005焦安静25马拉松1995-09-03
31004张德顺25马拉松1996-02-21
21003彭建华24马拉松1996-12-18
81009梁小静24百米1997-04-07
51006葛曼棋24百米1997-10-13
101011仁青东知布20马拉松2000-10-15

2. 分组筛选

2.1. 分组后,筛选每组最后一条记录

方法一,使用tail()。

df1 = df.groupby('sport', as_index=False).tail(1)
df1
idnameageGendersportbirthday
51006葛曼棋24百米1997-10-13
101011仁青东知布20马拉松2000-10-15

方法二,取倒数第一个,使用nth(-1)。

#取分组后倒数第一条记录
df2 = df.groupby('sport', as_index=False).nth(-1)
df2
idnameageGendersportbirthday
51006葛曼棋24百米1997-10-13
101011仁青东知布20马拉松2000-10-15

2.2. 分组后,筛选每组倒数第二条记录

#取分组后倒数第二条记录
df3 = df.groupby('sport', as_index=False).nth(-2)
df3
idnameageGendersportbirthday
21003彭建华24马拉松1996-12-18
81009梁小静24百米1997-04-07

2.3. 分组后,筛选每组首条记录

df4 = df.groupby('sport', as_index=False).head(1)
df4
idnameageGendersportbirthday
01001董国建34马拉松1987-03-16
11002苏炳添31百米1989-08-29

2.4. 分组后,筛选每组前两条记录(top2)

df5 = df.groupby('sport', as_index=False).head(2)
df5
idnameageGendersportbirthday
01001董国建34马拉松1987-03-16
11002苏炳添31百米1989-08-29
91010韦永丽30百米1991-10-11
111012张新艳27马拉松1994-02-01

2.5. 按条件筛选分组

df6 = df.groupby('sport', as_index=False).apply(lambda x: x.loc[x.loc[x['age']>24].index]).reset_index(drop=True)
df6
idnameageGendersportbirthday
01002苏炳添31百米1989-08-29
11007吴智强27百米1994-04-13
21008谢震业28百米1993-08-17
31010韦永丽30百米1991-10-11
41001董国建34马拉松1987-03-16
51004张德顺25马拉松1996-02-21
61005焦安静25马拉松1995-09-03
71012张新艳27马拉松1994-02-01

2.6. 分组后,按组筛选

第一步,建立分组。

df_grouped = df.groupby('sport', as_index=False)
df_grouped
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001F2B7102518>

第二步,分组后,按组筛选数据。

df7 = df_grouped.get_group('马拉松')
df7
idnameageGendersportbirthday
01001董国建34马拉松1987-03-16
111012张新艳27马拉松1994-02-01
41005焦安静25马拉松1995-09-03
31004张德顺25马拉松1996-02-21
21003彭建华24马拉松1996-12-18
101011仁青东知布20马拉松2000-10-15

2.7. 分组后,使用Filter筛选

filter函数是用来筛选其中全体组的(既每个组的全体),传入的值应当是布尔标量,如果这个组有一个不满足条件,整个组都被过滤掉了


df8 = df.groupby('sport', as_index=False).filter(lambda x: (x.age>20).all())
df8
idnameageGendersportbirthday
11002苏炳添31百米1989-08-29
51006葛曼棋24百米1997-10-13
61007吴智强27百米1994-04-13
71008谢震业28百米1993-08-17
81009梁小静24百米1997-04-07
91010韦永丽30百米1991-10-11

标签:数据分析,10,df,百米,马拉松,分组,24,筛选,Pandas
来源: https://blog.csdn.net/xiaoyw/article/details/120650180

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有