大熊猫遗失了一栏

时间:2017-08-31 09:11:34

标签: python pandas

我有这个数据集:

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

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

Id   query  count
001  ccd    100
001  bcd    30
002  ahhd   30
002  ahe    28

我尝试了这两行代码:

df.groupby('Id')['count'].nlargest(2),"查询"列在结果中丢失,这不是我想要的。那么如何在我的结果中保持查询。 Id计数

001     100
001     30
002     30
002     28

3 个答案:

答案 0 :(得分:2)

使用缺失列的set_index

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

答案 1 :(得分:2)

我使用方法groupby applypd.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

答案 2 :(得分:1)

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

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