如何将Pandas DataFrame两行合并为一行?解决合并后NaN问题
Pandas两行合并为一行(消除NaN)的解决方案
方法1:分组提取非空值
如果两行属于同一逻辑组,可添加统一分组键后,用groupby结合first()提取非空值:
import pandas as pd # 示例初始DataFrame df = pd.DataFrame({ 'A': [1, None], 'B': [None, 2], 'C': [3, 3] }) # 添加分组键(所有行归为同一组) df['group_key'] = 0 # 分组后提取每行非空值,合并为一行 merged_df = df.groupby('group_key').first().reset_index(drop=True)
first()会优先保留每行的非空值,若有重复值则取第一个出现的;若需保留最后一个重复值,替换为last()即可。
方法2:双向填充后取单行
针对仅两行的场景,直接用bfill()+ffill()填充空值,再取第一行:
merged_df = df.bfill().ffill().head(1)
bfill()用下一行非空值填充当前行NaN,ffill()用前一行非空值填充,最终两行的有效数据会合并到同一行。
方法3:堆叠转置过滤NaN
通过stack()过滤NaN,再unstack()转回列结构:
merged_df = df.stack().unstack().reset_index(drop=True)
stack()将列转为多级索引的行,自动剔除NaN;unstack()还原列结构,直接得到无NaN的单行结果。
内容的提问来源于stack exchange,提问作者test0101
相关产品推荐
相关产品推荐

