如何在Pandas中合并同一DataFrame的两行数据
问题描述
原始DataFrame如下:
| sn | ID | Amount |
|---|---|---|
| 0 | 10 | 3836.68 |
| 1 | 1087.63 | |
| 2 | 70 | |
| 3 | 20 | 2863.56 |
需要将其转换为如下形式,合并存在缺失值的相邻行,补全有效数据后移除冗余行:
| sn | ID | Amount |
|---|---|---|
| 0 | 10 | 3836.68 |
| 1 | 70 | 1087.63 |
| 3 | 20 | 2863.56 |
解决方案
使用Pandas可以通过分组聚合的方式实现需求,代码如下:
import pandas as pd import numpy as np # 构造原始数据 df = pd.DataFrame({ 'sn': [0, 1, 2, 3], 'ID': [10, np.nan, 70, 20], 'Amount': [3836.68, 1087.63, np.nan, 2863.56] }) # 生成分组标识:无缺失值的行作为新分组的起点 group_key = df.notna().all(axis=1).cumsum() # 按分组聚合,提取有效数据并保留目标行的sn result = df.groupby(group_key).agg({ 'sn': 'first', 'ID': lambda x: x.dropna().iloc[0], 'Amount': lambda x: x.dropna().iloc[0] }).reset_index(drop=True) print(result)
代码说明
df.notna().all(axis=1):判断每行是否所有字段都无缺失值,返回布尔数组;cumsum()将连续的缺失行归为同一分组,无缺失行作为新分组的起始。- 分组聚合时:
sn取分组内的第一个值,保留需要的行标识;ID和Amount分别提取分组内的非缺失值,完成数据补全;
- 最后通过
reset_index(drop=True)重置索引,得到目标结构。
内容的提问来源于stack exchange,提问作者Raj Banerjee
相关产品推荐
相关产品推荐

