Объединение двух информационных фреймов разной длины - PullRequest
0 голосов
/ 24 сентября 2018

Как мне объединить два кадра данных панд разной длины, например:

df1 = Index  block_id   Ut_rec_0
       0       0           7
       1       1           10
       2       2           2
       3       3           0
       4       4           10
       5       5           3
       6       6           6
       7       7           9


df2 = Index  block_id   Ut_rec_1
       0       0           3
       2       2           5
       3       3           5
       5       5           9
       7       7           4

result = Index  block_id    Ut_rec_0    Ut_rec_1
           0       0           7           3
           1       1           10          NaN
           2       2           2           5
           3       3           0           5
           4       4           10          NaN
           5       5           3           9
           6       6           6           NaN
           7       7           9           4

Я уже пробовал что-то подобное, но это не сработало:

df_result = pd.concat([df1, df2], join_axes=[df1['block_id']])

Я уже пробовал:df_result = pd.concat ([df1, df2, axis = 1) Но результат был:

Index   block_id    Ut_rec_0    Index   block_id    Ut_rec_1
  0            0          7         0.0   0.0         3.0
  1            1          10        1.0   2.0         5.0
  2            2          2         2.0   3.0         5.0
  3            3          0         3.0   5.0         9.0
  4            4          10        4.0   7.0         4.0
  5            5          3         NaN   NaN         NaN
  6            6          6         NaN   NaN         NaN
  7            7          9         NaN   NaN         NaN

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

pandas.DataFrame.join может «объединять» кадры данных на основе перекрытия данных столбца (или индекса).Что-то вроде этого, вероятно, будет работать для вас:

df1.join(df2.set_index('block_id'), on='block_id')
0 голосов
/ 24 сентября 2018

вам нужно, pd.merge с внешним соединением,

pd.merge(df1,df2,on=['Index','block_id'],how='outer')
#[out]
#Index  block_id    Ut_rec_0    Ut_rec_1
#0      0               7       3.0
#1      1               10      NaN
#2      2               2       5.0
#3      3               0       5.0
#4      4               10      NaN
#5      5               3       9.0
#6      6               6       NaN
#7      7               9       4.0
0 голосов
/ 24 сентября 2018

Как сказал @Wen, лучше всего будет использовать concat с axis как 1, как показано ниже:

pd.concat([df1, df2],axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...