合并两个不同长度的数据框

时间:2018-09-24 01:41:45

标签: python python-3.x pandas

如何合并两个长度不同的熊猫数据框,如下所示:

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 :(得分:0)

就像@Wen所说的,最好将concataxis一起使用1,就像下面的代码一样:

pd.concat([df1, df2],axis=1)

答案 1 :(得分:0)

pandas.DataFrame.join可以基于列数据(或索引)的重叠来“联接”数据帧。这样的事情可能会为您工作:

df1.join(df2.set_index('block_id'), on='block_id')

答案 2 :(得分:0)

您需要使用外部联接的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