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

如何在Pandas中合并因长描述拆分的账户账单DataFrame行?

解决方法

不用逐行迭代,完全可以用Pandas的向量化操作搞定,核心是先给需要合并的行打上同一个分组标签,再按组聚合处理:

步骤1:准备示例数据

先把你给出的示例转成DataFrame:

import pandas as pd
import numpy as np

data = {
    'Description': ['e-Transfer - Autodeposit', '                   AF6hdfUdV', 'Credit Card Payment'],
    'Withdrawals': ['', '', '46.78'],
    'Deposits': ['', '17.45', '']
}
df = pd.DataFrame(data)
# 把空字符串转成NaN,方便后续判断
df = df.replace('', np.nan)

步骤2:生成分组标识

判断每行是否是完整记录行(即Withdrawals或Deposits有值),然后用cumsum()生成分组ID,再向前填充,让拆分的两行归为同一组:

# 标记完整记录行(有金额的行)
df['is_complete'] = df[['Withdrawals', 'Deposits']].notna().any(axis=1)
# 生成分组ID,完整行作为新组的起点
df['group_id'] = df['is_complete'].cumsum()
# 向前填充分组ID,让上一行拆分的描述行和当前完整行同组
df['group_id'] = df['group_id'].ffill()

步骤3:按组聚合合并

对每个分组,合并Description列,同时提取Withdrawals和Deposits的非空值:

merged_df = df.groupby('group_id').agg(
    Description=('Description', lambda x: ' '.join(x.str.strip())),
    Withdrawals=('Withdrawals', lambda x: x.dropna().iloc[0] if not x.dropna().empty else np.nan),
    Deposits=('Deposits', lambda x: x.dropna().iloc[0] if not x.dropna().empty else np.nan)
).reset_index(drop=True)

最终结果

运行后merged_df就是合并好的DataFrame:

DescriptionWithdrawalsDeposits
e-Transfer - Autodeposit AF6hdfUdVNaN17.45
Credit Card Payment46.78NaN

关键逻辑说明

  • 利用cumsum()生成分组:完整记录行(有金额)会触发分组ID递增,拆分的描述行因为没有金额,会继承下一行的分组ID(通过ffill())
  • 聚合时用str.strip()去掉描述文本的多余空格,再拼接成完整描述
  • 金额列取分组内的非空值,保证每个分组只保留有效金额

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:04:57