最大的Pandas失去了一个纵队

2024-09-30 04:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据集:

Id   query  count
001  abc    20
001  bcd    30
001  ccd   100
002  ace   13
002  ahhd   30
002  ahe    28

我想根据计数找到每个Id的Top2查询。所以我想看看:

^{pr2}$

我试过这两行代码:

df.groupby('Id')['count'].nlargest(2),“query”列在结果中丢失,这不是我想要的。所以如何在结果中保留查询。 Id计数

001     100
001     30
002     30
002     28

Tags: 数据代码iddfcountqueryccd计数
3条回答

我使用groupbyapply方法pd.DataFrame.nlargest。这与pd.Series.nlargest的不同之处在于,在选择n行时,我必须指定一组要考虑的列。此解决方案保留附加到行的原始索引值(如果这对OP或最终用户很重要)。在

df.groupby('Id', group_keys=False).apply(
    pd.DataFrame.nlargest, n=2, columns='count')

   Id query  count
2   1   ccd    100
1   1   bcd     30
4   2  ahhd     30
5   2   ahe     28

您仍然可以使用groupby执行此操作:

df.sort_values('count', ascending = False).groupby('Id').head(2)

使用缺失列的^{}

df = df.set_index('query').groupby('Id')['count'].nlargest(2).reset_index()
print (df)
    Id query  count
0  001   ccd    100
1  001   bcd     30
2  002  ahhd     30
3  002   ahe     28

相关问题 更多 >

    热门问题