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

如何在Pandas DataFrame中合并交替行(一行有数据一行含NaN)

搞定PDF读取后DataFrame的行拆分问题

直接给你能落地的解决方案,针对你说的「一行有完整数据、下一行仅Column A有值其余为NaN」的情况:

步骤1:给行打分组标签

用行号整除2生成分组ID,这样第0、1行自动归为一组,第2、3行归为下一组,以此类推:

df['group_id'] = df.index // 2

步骤2:分组聚合处理

分组后对不同列用对应的聚合逻辑:

  • Column A:把同组两行的字符串拼接(分隔符可以自己换,比如空格、空串)
  • 其他列:直接取组内非空的有效数据(因为每组只有一行有值,用first()/max()都能拿到)

代码示例:

clean_df = df.groupby('group_id').agg(
    Column_A=('Column A', lambda x: ' '.join(x)),  # 把空格换成你需要的分隔符即可
    Column_B=('Column B', 'first'),
    Column_C=('Column C', 'first')
).reset_index(drop=True)

为啥你之前用agg(sum)不行?

sum对字符串是拼接逻辑,但对数值列是求和,问题出在你没给不同列指定对应聚合方式:如果直接全列用sum,遇到非Column A的字符串列会报错;另外就算只有数值列,逻辑上虽然能拿到结果,但不如first()直观——毕竟我们本来就是要取组里唯一的有效数据,不是求和。

示例验证

假设原始DataFrame是这样:

import pandas as pd
df = pd.DataFrame({
    'Column A': ['订单编号:202401', '(北京仓)', '客户名称:张三', '(个人用户)'],
    'Column B': [150, pd.NA, 200, pd.NA],
    'Column C': ['已发货', pd.NA, '待付款', pd.NA]
})

处理后得到的clean_df就是:

Column AColumn BColumn C
订单编号:202401 (北京仓)150已发货
客户名称:张三 (个人用户)200待付款

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:33:23