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

Posted 肖永威

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Pandas高级数据分析快速入门之数据筛选——分组排序筛选实践笔记的主要内容,如果未能解决你的问题,请参考以下文章

快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]

Pandas高级数据分析快速入门之二——基础篇

Pandas高级数据分析快速入门之五——机器学习特征工程篇

Pandas高级数据分析快速入门之五——机器学习特征工程篇

Pandas高级数据分析快速入门之四——数据可视化篇

Pandas高级数据分析快速入门之六——机器学习预测分析篇