假设我有以下两个数据框:
>>> import pandas as pd
>>> df1 = pd.DataFrame({"key":[1,3,5], "columnA":[30,40,50]})
>>> df1
key columnA
0 1 30
1 3 40
2 5 50
>>> df2 = pd.DataFrame({"key":[2,4], "columnB":[60,70]})
>>> df2
key columnB
0 2 60
1 4 70
我基本上想要一个新的数据帧,具有“ key”,“ columnA”和“ columnB”,其中相应的数据分别从上述两个数据帧“交织”。我是这样做的:
>>> pd.merge(df1, df2, on='key', how='outer').astype('Int64')
key columnA columnB
0 1 30 <NA>
1 3 40 <NA>
2 5 50 <NA>
3 2 <NA> 60
4 4 <NA> 70
...接近了-但我希望输出为:
key columnA columnB
0 1 30 <NA>
1 2 <NA> 60
2 3 40 <NA>
3 4 <NA> 70
4 5 50 <NA>
我该如何实现?
答案 0 :(得分:3)
您可以先使用sort_values
,然后再使用reset_index
来获得预期的输出。
In [778]: pd.merge(df1, df2, on='key', how='outer').astype('Int64').sort_values('key').reset_index().drop('index',1)
Out[778]:
key columnA columnB
0 1 30 <NA>
1 2 <NA> 60
2 3 40 <NA>
3 4 <NA> 70
4 5 50 <NA>
或者您可以在ignore_index=True
参数本身中传递sort_values
:
In [795]: pd.merge(df1, df2, on='key', how='outer').astype('Int64').sort_values('key', ignore_index=True)
Out[795]:
key columnA columnB
0 1 30 <NA>
1 2 <NA> 60
2 3 40 <NA>
3 4 <NA> 70
4 5 50 <NA>
答案 1 :(得分:1)
将DataFrame.sort_values
与DataFrame.reset_index
和drop=True
参数一起使用:
df = (pd.merge(df1, df2, on='key', how='outer')
.astype('Int64')
.sort_values('key')
.reset_index(drop=True))
print (df)
key columnA columnB
0 1 30 NaN
1 2 NaN 60
2 3 40 NaN
3 4 NaN 70
4 5 50 NaN