我有一個雙邊資料集,這意味著我有兩列國名。
東風:
| 國家 | 合作伙伴國家 | 年 | 變數1 |
|---|---|---|---|
| 火雞 | 西班牙 | 2019 | 320 |
df2:
| 國家 | 年 | 指數 |
|---|---|---|
| 火雞 | 2019 | 0 |
| 西班牙 | 2019 | 1 |
期望的結果:
| 國家 | index_country | 合作伙伴國家 | index_partner | 年 | 變數1 |
|---|---|---|---|---|---|
| 火雞 | 0 | 西班牙 | 1 | 2019 | 320 |
我希望在不合并兩次的情況下獲得所需的結果。
uj5u.com熱心網友回復:
可以通過 unpivot (melt)、left join 和pivot:
df = (df1.rename_axis('idx').reset_index()
.melt(['idx','var1','year'], value_name='Country').merge(df2, how='left')
.pivot(index=['idx','var1','year'], columns='variable', values=['index','Country'])
.sort_index(axis=1, level=0, sort_remaining=False)
)
df.columns = [f'{a}_{b}' if a == 'index' else b for a, b in df.columns]
df = df.reset_index().drop('idx', axis=1)
print (df)
var1 year Country Partner Country index_Country index_Partner Country
0 320 2019 Turkey Spain 0 1
解決方案 double merge:
df = (df1.merge(df2.rename(columns={'index':'index_country'}),
how='left',
on=['Country','year'])
.merge(df2.rename(columns={'index':'index_partner'}),
how='left', left_on=['Partner Country','year'],
right_on=['Country','year'],
suffixes=('','_')).drop('Country_', axis=1)
)
print (df)
Country Partner Country year var1 index_country index_partner
0 Turkey Spain 2019 320 0 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/519745.html
標籤:熊猫合并
上一篇:col內的值計數
下一篇:獲取資料框列的絕對值之和
