合并列上的Pandas数据框,并按同一列对结果进行排序

时间:2020-04-09 07:50:49

标签: python pandas dataframe

假设我有以下两个数据框:

>>> 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>

我该如何实现?

2 个答案:

答案 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_valuesDataFrame.reset_indexdrop=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