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

Python中按分组为DataFrame迭代追加历史B值生成C列的问题

解决Pandas按组累积拼接列值的问题

你需要按A列分组,对每个组内的B值进行从当前行向上的累积拼接生成C列对吧?我给你两个简洁高效的解决方案,都是直接贴合需求的:

方案一:用expanding窗口实现累积拼接

import pandas as pd

# 构造你的原始DataFrame
df = pd.DataFrame({
    'Date': ['2015-01-01', '2015-01-02', '2015-01-03', '2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04', '2015-01-05'],
    'A': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
    'B': [0, 1, 0, 0, 0, 0, 1, 1]
})

# 核心逻辑:按A分组后,对B列转字符串做累积拼接
df['C'] = df.groupby('A')['B'].apply(
    lambda x: x.astype(str).expanding().apply(lambda y: ''.join(y))
).reset_index(level=0, drop=True)

print(df)

代码说明

  1. 分组隔离:groupby('A')把数据拆成独立的两组(A组和B组),避免跨组拼接;
  2. 类型转换:把B列的数值转成字符串,才能做拼接操作;
  3. 累积窗口:expanding()会为每一行生成包含从第一行到当前行的窗口,用''.join(y)把窗口内的所有字符串拼起来;
  4. 索引对齐:reset_index去掉分组带来的额外索引,让结果和原DataFrame完美匹配。

方案二:用列表推导式实现(更易读)

如果觉得嵌套lambda有点绕,也可以用这种更直观的写法:

df['C'] = df.groupby('A')['B'].transform(
    lambda x: [''.join(map(str, x[:i+1])) for i in range(len(x))]
)

这个逻辑是对每个分组的B列,逐行生成从开头到当前行的拼接字符串,代码逻辑一眼就能看懂。

运行结果

两种方案都会输出你想要的目标DataFrame:

Date  A  B      C
0  2015-01-01  A  0      0
1  2015-01-02  A  1     01
2  2015-01-03  A  0    010
3  2015-01-01  B  0      0
4  2015-01-02  B  0     00
5  2015-01-03  B  0    000
6  2015-01-04  B  1   0001
7  2015-01-05  B  1  00011

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:50:06