通过groupby连接熊猫数据框

时间:2018-07-06 19:51:33

标签: python pandas group-by

我有一个列为'x','y','z'的pandas DataFrame 但是,许多x和y值是多余的。我想取所有具有相同x和y值的行,并对第三列求和,返回一个较小的DataFrame。 因此,

         x     y         z
0       1      2         1
1       1      2         5
2       1      2         0
3       1      3         0
4       2      6         1

它将返回:

        x      y         z
0       1      2         6
1       1      3         0
2       2      6         1

我尝试过

df = df.groupby(['x', 'y'])['z'].sum

但是我不确定如何使用分组对象。

2 个答案:

答案 0 :(得分:4)

非常接近现状;您只需要调用.sum(),然后重置索引即可:

>>> df.groupby(['x', 'y'])['z'].sum().reset_index()
   x  y  z
0  1  2  6
1  1  3  0
2  2  6  1

groupby()中还有一个参数可以处理该问题:

>>> df.groupby(['x', 'y'], as_index=False)['z'].sum()
   x  y  z
0  1  2  6
1  1  3  0
2  2  6  1

在您的问题中,您有df.groupby(['x', 'y'])['z'].sum,但没有括号。这只是将方法 .sum引用为Python对象,而不调用它。

>>> type(df.groupby(['x', 'y'])['z'].sum)
method

>>> callable(df.groupby(['x', 'y'])['z'].sum)
True

答案 1 :(得分:0)

不使用groupby语法的另一种选择是使用索引并按如下所示在索引级别进行求和:

df.set_index(['x','y']).sum(level=[0,1]).reset_index()

输出:

   x  y  z
0  1  2  6
1  1  3  0
2  2  6  1