我有一个像这样的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
答案 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()