我真正想做的事情可以用sql
来表达:
SELECT v1, v2, COUNT(*) AS v_count FROM my_table GROUP BY 1,2
这意味着,我想创建一个由3列组成的新数据框:(v1, v2, v_count)
。
以下是我使用pandas
尝试的内容:
grp = df.groupby(['v1', 'v2']) # GROUP BY v1, v2
cnt = grp.count() # get v_count for each group
但是如何将它们组合成一个新的数据框?
答案 0 :(得分:1)
您可以选择其中一个聚合列为v_count
,然后重置索引,因为v1
和v2
位于索引中,例如:
df.groupby(['v1', 'v2'])['v1'].agg({'v_count': np.size}).reset_index()
或者,您可以使用as_index
关键字参数代替使用reset_index
,例如:
df.groupby(['v1', 'v2'], as_index=False)['v1'].agg({'v_count': np.size})