用另一个带有pandas python的数据框替换NaN值

时间:2017-06-29 20:43:40

标签: python-3.x pandas

在使用不同索引长度的另一个数据帧替换一个数据帧中的NaN值的一列有效期时,我感到有点困惑。

示例数据df1:

    SOH     Price     Value  Expiry  Comments  
0    1P     10.49     10.49     NaN       NaN  
1   220      7.55     16.61     NaN       NaN  

用df2替换过期列:

    SOH     Price     Value    Expiry  Comments  
1    1P      6.22      6.22     NaN       NaN  
2    61     17.65     10.77     NaN       NaN  
3    1P     11.99     11.99     NaN       NaN  
4    2P     54.45    108.90     NaN       NaN  
5    1P     10.49     10.49     May-17       NaN  
6   220      7.55     16.61     June-18       NaN 

因此,新数据框可能具有不同的顺序和索引,但列保持不变。

我想为df1输出实现:
        SOH价格价值到期评论
    0 1P 10.49 10.49 May-17 NaN
    1 220 7.55 16.61 June18 NaN

我试过了:

  • df1.fillna(df2),
  • df1.update(DF2)
  • df1.loc [df1 ['Expiry']。isnull(),'Expiry'] = DF1 [ '到期']。图(df2.Expiry)
  • 带3个参数的前进循环,
  • 合并
  • 内部联接

但还没有运气:(任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

join上的

['SOH', 'Price', 'Value']然后fillna

cols = ['SOH', 'Price', 'Value']
d2 = df2.set_index(cols).Expiry.dropna()
df1.fillna(df1.drop('Expiry', 1).join(d2, on=cols))

   SOH  Price  Value   Expiry Comments
0   1P  10.49  10.49   May-17      NaN
1  220   7.55  16.61  June-18      NaN