如何为Pandas DataFrame的每个ID追加另一DataFrame的行
解决方式:用列表推导式+pd.concat实现行追加
先看示例数据:
import pandas as pd import numpy as np # 示例df1 df1 = pd.DataFrame({ 'id': [1, 2], 'data_col': ['A', 'B'] }) # 示例df2(id列为空) df2 = pd.DataFrame({ 'id': [np.nan, np.nan], 'data_col': ['X', 'Y'] })
目标输出效果:
id data_col 0 1.0 A 1 NaN X 2 NaN Y 3 2.0 B 4 NaN X 5 NaN Y
直接用列表推导式生成每个id对应的拼接块,再整体合并:
# 遍历df1的每一行索引,将该行与df2拼接,最后合并所有结果 result = pd.concat([pd.concat([df1.loc[[idx]], df2], ignore_index=True) for idx in df1.index], ignore_index=True)
为什么不用for/if else循环行?
Pandas的设计核心是向量化操作,循环单行会大幅降低处理效率,尤其是当df1数据量较大时。上面的方法利用Pandas内置的concat方法批量处理,既简洁又高效。
补充说明
如果df1和df2的列不完全一致,concat会自动补全缺失值为NaN,不影响最终结果。如果需要严格保留原列顺序,可在concat时指定sort=False(Pandas 1.0.0及以上版本默认sort=False)。
内容的提问来源于stack exchange,提问作者padawan
相关产品推荐
相关产品推荐

