首页 > 解决方案 > 我如何将特定列中的所有值相加到当前行

问题描述

我有带有二进制列(my_column)和id列的 df。我想创建一个新列,对于每一行,将二进制列中属于同一 id 的所有值相加,但不包括行本身。

样本输入:

    id  my_column
0   111 0
1   111 1
2   111 1
3   111 0
4   222 1
5   222 1
6   222 1
7   222 1

样本输出:

    id  my_column   new_column
0   111 0           0
1   111 1           0
2   111 1           1
3   111 0           2
4   222 1           0
5   222 1           1
6   222 1           2
7   222 1           3

标签: pythonpandas

解决方案


您可以transform使用cumsum

df['new_column'] = df.groupby('id').my_column.transform('cumsum') - df.my_column

这将汇总相同 id 上的所有行(不包括当前行)。如果您想要连续 id 块的总和并在 id 块重复时从 0 开始,那么您可以使用以下命令:

df['new_column_1'] = df.groupby(df.id.ne(df.id.shift()).cumsum()).my_column.transform('cumsum') - df.my_column

请参阅以下示例中最后一行的不同行为:

    id  my_column  new_column  new_column_1
0  111          0           0             0
1  111          1           0             0
2  111          1           1             1
3  111          0           2             2
4  222          1           0             0
5  222          1           1             1
6  222          1           2             2
7  222          1           3             3
8  111          1           2             0

推荐阅读