python - 我如何将特定列中的所有值相加到当前行
问题描述
我有带有二进制列(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
解决方案
您可以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
推荐阅读
- mysql - 如何定义多对多链接表
- sql - 拆分在 Oracle 中没有分隔符的字符串
- php - Lavarel Auth::check() 不工作
- pandas - 按年分组并计算平均值并计算熊猫的大小
- python - tensorflow 错误:模块没有属性 GraphDef
- c++ - 登录到 Tizen 中的特定文件?
- angular - Angular Route 之一在 Angular Prod Build 中不起作用
- javascript - 如何放大谷歌条形图的文本大小并在每个条形上显示 x 值?
- python - 如何在 Dash Table 中舍入小数位
- apache-kafka - 是否可以使用输入流中的时间戳在 Flink 中创建 Tumbling Windows。如果是,那么如何?