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

如何用Python实现Pandas DataFrame连续行合并?附示例

需求描述

输入DataFrame:

0       1      2    3     4
0  vina    dfaf   5654  gfh   NaN
1  qwe     NaN    NaN   NaN   NaN
2  bina    456    NaN   108   NaN
3  asd     NaN    NaN   NaN   NaN
4  nina    NaN    NaN   678   NaN
5  jkl     NaN    NaN   NaN   NaN
6  tina    NaN    NaN   NaN   768
7  QWE     NaN    NaN   NaN   NaN

需处理得到输出DataFrame:

0         1      2    3     4
0  vinaqwe    dfaf   5654  gfh   NaN
1  binapsd    456    NaN   108   NaN
2  ninajkl    NaN    NaN   678   NaN
3  tinaQWE    NaN    NaN   NaN   768
实现代码
import pandas as pd
import numpy as np

# 构造输入DataFrame
df = pd.DataFrame({
    0: ['vina', 'qwe', 'bina', 'asd', 'nina', 'jkl', 'tina', 'QWE'],
    1: ['dfaf', np.nan, 456, np.nan, np.nan, np.nan, np.nan, np.nan],
    2: [5654, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
    3: ['gfh', np.nan, 108, np.nan, 678, np.nan, np.nan, np.nan],
    4: [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 768, np.nan]
})

# 生成每两行一组的分组标识
groups = np.arange(len(df)) // 2

# 分组聚合处理
result = df.groupby(groups).agg({
    0: lambda x: ''.join(x),
    1: lambda x: x.dropna().iloc[0] if not x.dropna().empty else np.nan,
    2: lambda x: x.dropna().iloc[0] if not x.dropna().empty else np.nan,
    3: lambda x: x.dropna().iloc[0] if not x.dropna().empty else np.nan,
    4: lambda x: x.dropna().iloc[0] if not x.dropna().empty else np.nan
}).reset_index(drop=True)

print(result)
代码说明
  • 先构造与需求匹配的输入DataFrame,用np.nan表示缺失值;
  • 通过np.arange(len(df)) // 2生成分组标签,将原始数据按每两行分为一组;
  • 分组后对列0执行字符串拼接,对其他列取每组中的非空值(若存在),无有效值则保留NaN;
  • 最后重置索引,得到目标格式的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:02:31