我有一个 Dataframe df
,我尝试在其中使用 groupby
和 nlargest
,但无法获得我想要的输出:
Date Symbol Count
0 2013 Q2 AAAA 8
1 2013 Q2 BBBB 3
2 2013 Q2 CCCC 8
3 2013 Q2 DDDD 4
4 2013 Q2 EEEE 5
5 2013 Q3 AAAA 22
6 2013 Q3 BBBB 11
7 2013 Q3 CCCC 3
8 2013 Q3 DDDD 15
9 2013 Q3 EEEE 2
10 2013 Q3 FFFF 10
我想使用groupby
按日期
进行选择,然后按count
获取前2个符号
该日期,以便输出如下所示:
Date Symbol Count
0 2013 Q2 AAAA 8
2 2013 Q2 CCCC 8
5 2013 Q3 AAAA 22
8 2013 Q3 DDDD 15
但是当我尝试 df = df.groupby(['Date'])['Count'].nlargest(2)
时,输出看起来像
2013 Q2 0 8
2 8
2013 Q3 5 22
8 15
最佳答案
方法一:
我们可以按Count
sort_values
,然后使用Groupby.head
获取每组的前2行:
dfn = df.sort_values('Count', ascending=False).groupby('Date').head(2).sort_index()
Date Symbol Count
0 2013 Q2 AAAA 8
2 2013 Q2 CCCC 8
5 2013 Q3 AAAA 22
8 2013 Q3 DDDD 15
<小时/>
方法2:
将apply
与isin
结合使用
dfn = df[df.groupby('Date')['Count'].apply(lambda x: x.isin(x.nlargest(2)))]
Date Symbol Count
0 2013 Q2 AAAA 8
2 2013 Q2 CCCC 8
5 2013 Q3 AAAA 22
8 2013 Q3 DDDD 15
注意:如果前 2 个值包含多行,则此方法将返回多行。
关于python - 如何使用 Pandas Groupby 和 nlargest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59974201/