Pandas Groupy 只取前 N 组
Pandas Groupy take only the first N Groups
我有一些要按 ID 分组的 DataFrame,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")
但是我怎样才能 return 只有前 N 个分组对象?例如我只想要前 3 个唯一的 item_ids.
这是使用 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
一种方法是使用 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
我有一些要按 ID 分组的 DataFrame,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")
但是我怎样才能 return 只有前 N 个分组对象?例如我只想要前 3 个唯一的 item_ids.
这是使用 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
一种方法是使用 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