数据框与缺失数据合并

时间:2016-08-23 19:02:14

标签: python pandas dataframe merge

我有2个数据帧:

df.head()
Out[2]: 
   Unnamed: 0 Symbol        Date      Close
0        4061      A  2016-01-13  36.515889
1        4062      A  2016-01-14  36.351784
2        4063      A  2016-01-15  36.351784
3        4064      A  2016-01-19  36.590483
4        4065      A  2016-01-20  35.934062

dfw.head()
Out[3]: 
         Symbol       Weight
0  A              (0.000002)
1  AA              0.000112 
2  AAC            (0.000004)
3  AAL             0.000006 
4  AAMC            0.000002 

ISSUE: 如果df在dfw中具有重量,则不是每个符号。如果不是,我想从我的新数据帧(它的所有日期)中删除它。如果符号在dfw​​中,我想将权重与df合并,以便每行都有符号,日期,关闭和权重。我尝试了以下但获得NaN值。即使我成功了,我也不确定如何删除所有没有权重的符号。

dfall = df.merge(dfw, on='Symbol', how='left')

dfall.head()
Out[14]: 
   Unnamed: 0 Symbol        Date      Close Weight
0        4061      A  2016-01-13  36.515889    NaN
1        4062      A  2016-01-14  36.351784    NaN
2        4063      A  2016-01-15  36.351784    NaN
3        4064      A  2016-01-19  36.590483    NaN
4        4065      A  2016-01-20  35.934062    NaN

1 个答案:

答案 0 :(得分:3)

df_all = df[df.Symbol.isin(dfw.Symbol.unique())].merge(dfw, how='left', on='Symbol')

我不确定你为什么得到NaN值。也许你的符号中有空格?您可以通过以下方式清除它们:dfw['Symbol'] = dfw.Symbol.str.strip()您需要对df执行相同操作。

>>> df_all
Unnamed: 0 Symbol        Date      Close      Weight
   0  4061      A  2016-01-13  36.515889  (0.000002)
   1  4062      A  2016-01-14  36.351784  (0.000002)
   2  4063      A  2016-01-15  36.351784  (0.000002)
   3  4064      A  2016-01-19  36.590483  (0.000002)
   4  4065      A  2016-01-20  35.934062  (0.000002)