Pandas 合并具有不同数据的数据帧以实现特定输出

Pandas merge dataframes with different datato achieve specific output

我正在试验 pandas,并面临合并问题,f.e

打印 df

                                    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

我该怎么做?谢谢。

更新: 在 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 合并, how='outer', 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

您需要使用 "outer" 模式进行合并:

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

请注意,df_to_merge 中的 x_val 不在您的预期输出中,我想这是一个错误,不是吗?

编辑:

重新排序行:

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

HTH