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
我正在试验 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