2016-08-10 3 views
0

У меня есть операция следующих слияний:Слияния/Добавляет DataFrame с собой приводит к появлению новых столбцов

data_static = pandas.merge(data_static, data_output[['TICKER', 'DATE', 'rolling_vola_40', 'rolling_vola_80', 'f_rolling_vola_40', 'f_rolling_vola_80', 'rolling_vola_prev_annum', 'rolling_vola_post_annum']], how='left', on=['TICKER', 'DATE']) 

Моя проблема сейчас в том, что это приводит к следующим заголовкам:

;YEAR;DATE;TICKER;LONG_COMP_NAME;ISSUER_INDUSTRY;INDUSTRY_SECTOR;COUNTRY;ACCOUNTING_STANDARD;ACCOUNTING_STANDARD_OVERRIDE;EQY_FUND_CRNCY;INDEX;DATE_PREV;DATE_NEXT;rolling_vola_40_x;rolling_vola_80_x;f_rolling_vola_40_x;f_rolling_vola_80_x;rolling_vola_prev_annum_x;rolling_vola_post_annum_x;rolling_vola_40_y;rolling_vola_80_y;f_rolling_vola_40_y;f_rolling_vola_80_y;rolling_vola_prev_annum_y;rolling_vola_post_annum_y 

Я хочу данные, чтобы войти в ту же колонку, например:

;YEAR;DATE;TICKER;LONG_COMP_NAME;ISSUER_INDUSTRY;INDUSTRY_SECTOR;COUNTRY;ACCOUNTING_STANDARD;ACCOUNTING_STANDARD_OVERRIDE;EQY_FUND_CRNCY;INDEX;DATE_PREV;DATE_NEXT;rolling_vola_40;rolling_vola_80;f_rolling_vola_40;f_rolling_vola_80;rolling_vola_prev_annum;rolling_vola_post_annum; 

Так что вместо того, чтобы идти рядом друг с другом, достаточно):

TICKER Val1_x Val2_x Val3_x Val1_y Val2_y Val3_y 
    A  80  6  1  NaN  NaN  NaN 
    B  NaN  NaN  NaN  10  12  14 

Я хочу, чтобы быть похожим на это:

TICKER Val1  Val2  Val3 
    A  80  6  1 
    B  10  12  14 

Мой слияние присоединяется к столбцам TICKER и DATE, так что не следует путать с помощью выборочных данных.

+0

Я не понимаю downvote. Вопрос реальный, и я еще не видел решения, которое работает. Я прочитал каждую запись stackoverflow справа и сделал это для следующего уровня. – Spurious

ответ

0

Работа здесь заключается в использовании append первый, а затем merge их в конце:

data_store = pandas.DataFrame(columns=('TICKER', 'DATE', 'rolling_vola_40', 'rolling_vola_80', 'f_rolling_vola_40', 'f_rolling_vola_80', 'rolling_vola_prev_annum', 'rolling_vola_post_annum')) 

for index, row in data_static.iterrows(): 
    data_output = vol(row['TICKER'], row['DATE'], row['DATE_PREV'], row['DATE_NEXT']) 
    if type(data_output) != type(None): 
     data_store = data_store.append(data_output[['TICKER', 'DATE', 'rolling_vola_40', 'rolling_vola_80', 'f_rolling_vola_40', 'f_rolling_vola_80', 'rolling_vola_prev_annum', 'rolling_vola_post_annum']]) 

data_static = pandas.merge(data_static, data_store[['TICKER', 'DATE', 'rolling_vola_40', 'rolling_vola_80', 'f_rolling_vola_40', 'f_rolling_vola_80', 'rolling_vola_prev_annum', 'rolling_vola_post_annum']], how='left', on=['TICKER', 'DATE']) 
data_static.to_csv('test.csv', sep=';', encoding='utf-8') 
Смежные вопросы