我有一些DataFrame,我希望按ID分组,e。 G:
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. g。我只想要前3个唯一的item_ids。
答案 0 :(得分:10)
以下是使用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
答案 1 :(得分:3)
一种方法是使用Counter
从列表中获取前3个唯一项,根据这些项过滤您的DataFrame,然后对此过滤的DataFrame执行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