如何按条件合并两个Pandas DataFrame:A==0时保留df1数据
解决方案
步骤说明
针对df2的B列做条件替换:当A列值为0时,取df1对应行的B值;其余情况保留df2原B值。df1中存在df2没有的行(如索引5、6),无需处理这些行。
代码实现
import pandas as pd # 构造示例DataFrame df1 = pd.DataFrame({ 'A': [0, 0, 1, 1, 2, 'Ciao', 3], 'B': [3, 2, 5, 3, 5, 'log', 4] }) df2 = pd.DataFrame({ 'A': [0, 0, 1, 1, 2], 'B': [-1, 20, -2, 33, 17] }) # 核心逻辑:替换df2中A==0的B值为df1对应行的B值 df2.loc[df2['A'] == 0, 'B'] = df1.loc[df1['A'] == 0, 'B'].values print(df2)
输出结果
A B 0 0 3 1 0 2 2 1 -2 3 1 33 4 2 17
关键细节
- 用
df.loc[条件, 列名]精准定位需要替换的行和列; - 加
.values避免pandas索引对齐问题,确保df1中A==0的两行B值(3、2)直接匹配到df2对应行; - df1中额外的行不影响结果,只处理df2存在的行范围。
内容的提问来源于stack exchange,提问作者emax
相关产品推荐
相关产品推荐

