2016-08-23 4 views
1

У меня 2 dataframes:dataframe сливаться с недостающими данными

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 

ВОПРОС: Не каждый символ, если ДФ будет иметь вес в 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

Смежные вопросы