2016-08-23 103 views
1

合并我有2个dataframes:据帧数据缺失

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 

问题: 并不是每一个符号,如果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 

回答

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) 
+0

我需要添加str。 (),df ['Symbol'] = dfw.Symbol.str.strip() dfw ['Symbol'] = dfw.Symbol.str.strip() – John

+0

实际上,关闭,但是,这给了我每个符号一次出现,我需要为每个日期添加符号的权重。 – John