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
逻辑说明
(df['A'] == 1).cumsum():这个操作会把每一行标记为一个分组号,每当遇到A=1的行,分组号就加1,这样就把所有连续的行按A=1分割成了独立的组。groupby('group')['B'].apply(lambda x: x.astype(str).cumsum()):在每个分组内,先把B列的数值转成字符串,然后用cumsum()对字符串做累积拼接——这个方法对字符串的作用就是把前面所有元素依次连起来,正好符合你“此前拼接的B列值 + 当前B列值”的需求。
如果你的B列本身已经是字符串类型,那可以去掉astype(str),直接用x.cumsum()就好啦~
内容的提问来源于stack exchange,提问作者jimmym91
相关产品推荐
相关产品推荐

