如何用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
相关产品推荐
相关产品推荐

