按两列中的值分组并在Pandas中过滤

时间:2015-11-18 15:39:08

标签: python pandas dataframe aggregate

我有一个像这样的DataFrame:

    name    sex births  year
0   Mary    F   7433    2000
1   John    M   6542    2000
2   Emma    F   2342    2000
3   Ron     M   5432    2001
4   Bessie  F   4234    2001
5   Jennie  F   2413    2002
6   Nick    M   2343    2002
7   Ron     M   4342    2002

我需要获取新的DataFrame,其中数据将按年份和性别进行分组,最后两列将是具有最大出生率和最大(出生)值的名称,如下所示:

    year   sex  name     births
0   2000   F    Mary     7433
1   2000   M    John     6542
2   2001   F    Bessie   4234
3   2001   M    Ron      5432   
4   2002   F    Jennie   2413
5   2002   M    Ron      4342

1 个答案:

答案 0 :(得分:4)

可以使用以下groupby操作完成:

>>> df.groupby(['year', 'sex'], as_index=False).max()
   year sex    name  births
0  2000   F    Mary    7433
1  2000   M    John    6542
2  2001   F  Bessie    4234
3  2001   M     Ron    5432
4  2002   F  Jennie    2413
5  2002   M     Ron    4342

as_index=False阻止groupby键成为返回的DataFrame中的索引。

或者,要获得所需的输出,您可能需要对“生日”列进行排序,然后使用groupby.first()

df = df.sort_values(by='births', ascending=False)
df.groupby(['year', 'sex'], as_index=False).first()