2015-02-24 2 views
1

Я экспериментировал с пандами, и сталкиваюсь с проблемой объединения, АяПанды объединить dataframes с различным datato достижением конкретных результатов

печати ф.р.

        0       1   2 
0       plot_title     title1 title2 
1        x_title       x   x 
2        y_title      Speed   y 
3        x_val0      xv0  NaN 
4        x_val1      xv1  v1 
5        exp1     3159.6  3200 
6        exp2     2441.2  NaN 

печати df_to слиянием

  0  1 
0 plot_title title 
1  x_title  x 
2  y_title  ro 
3  x_val Nan 
4  exp1  19 
5  exp7 127 

и Я хочу достичь

        0  1   2  3 
0       plot_title title1 title2 title 
1        x_title  x   x  x 
2        y_title Speed   y  ro 
3        x_val0  xv0  NaN NaN 
4        x_val1  xv1  v1 NaN 
5        exp1 3159.6  3200  19 
6        exp2 2441.2  NaN Nan 
7        exp7  NaN  NaN 127 

Как я могу это сделать? Благодарю.

UPDATE: После jeanrjc ответ я получаю ошибку клавишного

File "pandas/index.pyx", line 134, in pandas.index.IndexEngine.get_loc (pandas/index.c:3812) 
    File "pandas/index.pyx", line 156, in pandas.index.IndexEngine.get_loc (pandas/index.c:3749) 
KeyError: '0', 

но если я запускаю его с

df2 = df.merge (df_to слияния, как = 'внешний', left_on = "0", right_on = 0). Я получаю

такие df2 на выходе:

  0  1   0  1 
0 plot_title title1 plot_title title 
1  x_title  x  x_title  x 
2  y_title Speed  y_title  ro 
3  x_val0  xv0  x_val0 NaN 
4  x_val1  xv1  x_val1 NaN 
5  exp1 3159.6  exp1  19 
6  exp2 2441.2  exp2 NaN 
7  x_val  NaN  x_val Nan 
8  exp7  NaN  exp7 127 
+0

слияния() будет делать это. Возможно, вам нужно переименовать 2 своих столбца после объединения –

+0

можете ли вы расширить свой ответ, пожалуйста? – alohamaloha

ответ

1

Вы должны сделать слияние с режимом "внешней":

df2 = df.merge(df_to merge, how='outer', left_on="0", right_on="0") 

и переименовывать столбцы:

df2.columns = range(4) 

который дает:

  0  1  2  3 
0 plot_title title1 title2 title 
1  x_title  x  x  x 
2  y_title Speed  y  ro 
3  x_val0  xv0  NaN NaN 
4  x_val1  xv1  v1 NaN 
5  exp1 3159.6 3200  19 
6  exp2 2441.2  NaN NaN 
7  x_val  NaN  NaN Nan 
8  exp7  NaN  NaN 127 

Обратите внимание, что x_val от df_to_merge не входит в ваш ожидаемый результат, я думаю, это ошибка, не так ли?

редактировать:

Чтобы изменить порядок строк:

df2 = df2.reindex(index=[1,2,3,4,7,5,6,8]) 
df2.index = range(1,9) 

, который дает:

  0  1  2 3 
1 x_title  x  x x 
2 y_title Speed  y ro 
3 x_val0  xv0 NaN NaN 
4 x_val1  xv1 v1 NaN 
5 x_val  NaN NaN Nan 
6  exp1 3159.6 3200 19 
7  exp2 2441.2 NaN NaN 
8  exp7  NaN NaN 127 

НТН

+0

К сожалению: Файл «pandas/index.pyx», строка 134, в pandas.index.IndexEngine.get_loc (pandas/index.c: 3812) Файл «pandas/index.pyx», строка 156, в pandas.index. IndexEngine.get_loc (pandas/index.c: 3749) KeyError: '0' – alohamaloha

+0

Вы помещали кавычки вокруг '0'? – jrjc

+0

@DmitryMarkovnikov, Какая у вас версия Панд? – jrjc

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