You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python/Pandas按行循环拼接数据:基于条件生成新列

解决Pandas中按A列1分割并累积拼接B列的问题

嘿,我懂你要实现的需求啦!就是要以A列值为1的行作为分割点,把每个分割段里的B列值依次拼接起来,填充到对应的C列里对吧?其实不用写显式循环,用Pandas的分组和累积操作就能轻松搞定,而且效率比循环高多了~

步骤详解

首先,先还原你的示例数据:

import pandas as pd

data = {
    'A': [1,2,3,4,1,2,1,2,3],
    'B': [4,3,1,2,5,4,2,2,4]
}
df = pd.DataFrame(data)

接下来我们需要给每个以A=1开头的数据块创建分组标识:

# 每当遇到A列值为1的行,就创建一个新的分组
df['group'] = (df['A'] == 1).cumsum()

然后在每个分组内,对B列的数值做字符串累积拼接(必须转成字符串,不然会变成数值相加):

# 分组内累积拼接B的字符串形式,生成C列
df['C'] = df.groupby('group')['B'].apply(lambda x: x.astype(str).cumsum())

最后可以删掉临时的group列:

df = df.drop('group', axis=1)

最终结果

运行完上面的代码后,你的DataFrame会变成:

A  B     C
0  1  4     4
1  2  3    43
2  3  1   431
3  4  2  4312
4  1  5     5
5  2  4    54
6  1  2     2
7  2  2    22
8  3  4   224

逻辑说明

  1. (df['A'] == 1).cumsum():这个操作会把每一行标记为一个分组号,每当遇到A=1的行,分组号就加1,这样就把所有连续的行按A=1分割成了独立的组。
  2. groupby('group')['B'].apply(lambda x: x.astype(str).cumsum()):在每个分组内,先把B列的数值转成字符串,然后用cumsum()对字符串做累积拼接——这个方法对字符串的作用就是把前面所有元素依次连起来,正好符合你“此前拼接的B列值 + 当前B列值”的需求。

如果你的B列本身已经是字符串类型,那可以去掉astype(str),直接用x.cumsum()就好啦~

内容的提问来源于stack exchange,提问作者jimmym91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:35:04