[英]Merge Pandas dataframes on column, and have result sorted by same column
假設我有這兩個數據框:
>>> 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
我基本上想要一個新的 dataframe,帶有“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
...接近 - 但我希望 output 是:
key columnA columnB
0 1 30 <NA>
1 2 <NA> 60
2 3 40 <NA>
3 4 <NA> 70
4 5 50 <NA>
我怎樣才能做到這一點?
您可以使用sort_values
然后reset_index
來實現預期的 output。
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>
或者您可以在sort_values
參數本身中傳遞ignore_index=True
:
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>
使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.