python - 通过 groupby 连接 pandas Dataframe

标签 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

但我不确定如何处理分组对象。

最佳答案

非常接近原样;你只需要调用 .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

关于python - 通过 groupby 连接 pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51216819/

相关文章:

python - Selenium 只返回一个空列表

python - 使用装饰器调用不带参数的函数

python - 批量插入异常

python - PyCharm自动补全中的 `f`和 `m`是什么意思?

python - 按年份分组删除一些变量

python - 删除列中的 ""

python - 如何按对象计算 Pandas 组列中的不同值?

c# - 选择每组属性值最大的记录

mysql - 如何制定查询来显示一个人参加的所有类(class)

两张表的 MySQL 并集,一张带有时间戳,一张带有日期