从pandas中的GroupBy对象创建一个新的数据框

时间:2014-07-04 10:35:24

标签: sql pandas

我真正想做的事情可以用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

但是如何将它们组合成一个新的数据框?

1 个答案:

答案 0 :(得分:1)

您可以选择其中一个聚合列为v_count,然后重置索引,因为v1v2位于索引中,例如:

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})