我有以下数据框:
df = pd.DataFrame([
(1, 1, 'term1'),
(1, 2, 'term2'),
(1, 1, 'term1'),
(1, 1, 'term2'),
(2, 2, 'term3'),
(2, 3, 'term1'),
(2, 2, 'term1')
], columns=['id', 'group', 'term'])
我想按 id
对其进行分组和group
并计算该 id、组对的每个术语的数量。
所以最后我会得到这样的东西:
我能够通过使用 df.iterrows()
循环所有行来实现我想要的目标并创建一个新的数据框,但这显然效率低下。 (如果有帮助的话,我事先知道所有术语的列表,其中大约有 10 个)。
看起来我必须分组然后对值进行计数,所以我尝试使用 df.groupby(['id', 'group']).value_counts()
这不起作用,因为 value_counts在 groupby 系列上运行,而不是在数据帧上运行。
无论如何,我可以在不循环的情况下实现这一目标吗?
最佳答案
我使用groupby
和size
df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)
<小时/>
时间
1,000,000 行
df = pd.DataFrame(dict(id=np.random.choice(100, 1000000),
group=np.random.choice(20, 1000000),
term=np.random.choice(10, 1000000)))
关于python - Groupby 值依赖于数据框 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369440/