Pandas群只取前N组

2024-04-24 22:10:17 发布

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

我有一些数据帧,我想按ID分组,例如:

import pandas as pd
df = pd.DataFrame({'item_id': ['a', 'a', 'b', 'b', 'b', 'c', 'd'], 'user_id': [1,2,1,1,3,1,5]})
print df

产生:

  item_id  user_id
0       a        1
1       a        2
2       b        1
3       b        1
4       b        3
5       c        1
6       d        5

[7 rows x 2 columns]

我可以很容易地按id分组:

grouped = df.groupby("item_id")

但是我怎样才能按对象只返回前N个组呢?E、 我只想要前三个唯一的物品ID。


Tags: columns数据importiddataframepandasdfas
2条回答

一种方法是使用Counter从列表中获取前3个唯一项,根据这些项筛选数据帧,然后在此筛选的数据帧上执行groupby操作。

from collections import Counter

c = Counter(df.item_id)
most_common = [item for item, _ in c.most_common(3)]

>>> df[df.item_id.isin(most_common)].groupby('item_id').sum()
         user_id
item_id         
a              3
b              5
c              1

这是一种使用list(grouped)的方法。

result = [g[1] for g in list(grouped)[:3]]

# 1st
result[0]

  item_id  user_id
0       a        1
1       a        2

# 2nd
result[1]

  item_id  user_id
2       b        1
3       b        1
4       b        3

相关问题 更多 >