python - 如何使用 Pandas Groupby 和 nlargest

标签 python pandas

我有一个 Dataframe df,我尝试在其中使用 groupbynlargest ,但无法获得我想要的输出:

           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

最佳答案

方法一:

我们可以按Countsort_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:

applyisin结合使用

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/

相关文章:

Python新手数组——列表转换

python - 打印输入字谜中字谜的最大出现次数和字谜本身

Python Pandas - 通过保持特定顺序对值进行排序

python - pandas 中的左连接无需创建左右变量

python - Pandas - 每组内匹配的平均值减去不匹配的平均值

python - Cython:缺少 MSVCR140.dll

python - MySQL 查询参数的数量与传递给执行的参数匹配,但 Python 引发 "not all arguments converted"

javascript - 我如何获得网站中最顶部定位图像的链接?

python - 通过索引不同表中的行/列来创建新列。代码错误

python - 带有网络抓取的 Feed 数据框