Pandas如何将transaction details列分散多行的条目合并为单行
交易明细多行合并实现方案
以下提供两种常用场景的处理方式:
Pandas代码处理(适合大批量数据)
前置逻辑
通常这类拆分数据的规律是:单条交易的唯一标识字段(如交易ID、交易日期、金额等)仅在拆分后的第一行有值,后续明细行的这些字段为空,我们可以基于这个规律做分组合并。
- 步骤1:填充分组标识
import pandas as pd # 向前填充空的唯一标识列,生成分组ID df['group_id'] = df['交易ID'].ffill()
- 步骤2:按分组合并明细内容
df_merged = df.groupby('group_id', as_index=False).agg({ # 非明细类字段保留首个非空值 '交易日期': 'first', '交易金额': 'first', # 明细字段拼接所有行内容,用换行符分隔,也可换成空格、分号等其他分隔符 'transaction details': lambda x: '\n'.join(x.dropna().astype(str)) })
- 验证效果:合并完成后执行
print(df_merged.loc[0, 'transaction details'])即可输出第一条交易的完整明细。
如果没有单独的唯一标识列,可以根据明细首行的特征生成分组ID,比如首行明细固定以时间开头:
# 匹配以HH:MM格式时间开头的行作为新分组的起始,累计生成组ID df['group_id'] = df['transaction details'].str.match(r'^\d{2}:\d{2}').cumsum() # 后续分组合并逻辑和上面一致
Excel手动处理(适合小批量数据)
- 新增辅助列生成组ID,假设A列是仅首行有值的标识列,B列为辅助列,第二行输入公式
=IF(A2<>"",MAX(B$1:B1)+1,B1),下拉填充所有行 - 新增合并明细列,用TEXTJOIN函数按组拼接,公式示例:
=TEXTJOIN(CHAR(10),TRUE,IF(B:B=D2,C:C,"")),输入后按Ctrl+Shift+Enter生效,其中D2为对应组ID,C列为交易明细列,勾选单元格自动换行即可展示分段效果。
内容的提问来源于stack exchange,提问作者user840
相关产品推荐
相关产品推荐

