[英]Cross join of three dataframes
我想加入以下結構的三個數據框:
january_df=pd.DataFrame({
'January':[4,4,3,2,1,1],
'Product_no':['B1','B2','S1','S2','B3','T1'],
'Label':['Ball','Bikini','Shoe','Shirt','Bag','Towel'],
'ID':[1000, 1001, 1002, 1003, 1004, 1005],
})
february_df=pd.DataFrame({
'February':[4,3,3,2,1,1],
'Product_no':['S1','B2','B1','T1','S2','B3'],
'Label':['Shoe','Bikini','Ball','Towel','Shirt','Bag'],
'ID':[1002, 1001, 1000, 1005, 1003, 1004],
})
march_df=pd.DataFrame({
'March':[5,1,1,1,1,1],
'Product_no':['T1','E1','S1','B3','L1','B1'],
'Label':['Towel','Earring','Shoe','Bag','Lotion','Ball'],
'ID':[1005, 1006, 1002, 1004, 1007, 1000],
})
三月所需的 output 應該是:
January February March Product_no Label ID
---------------------------------------------------------
01 1 2 5 T1 Towel 1005
02 0 0 1 E1 Earring 1006
03 3 4 1 S1 Shoe 1002
04 1 1 1 B3 Bag 1004
05 0 0 1 L1 Lotion 1006
06 4 3 1 B1 Ball 1000
第一步,我嘗試合並三月和二月
all_df = pd.merge(march_df, february_df, on="ID")
但它並沒有產生兩個月的結果。 我試圖用 pandas 和pandas 三路連接列上的多個數據幀來理解有關高性能笛卡爾積(CROSS JOIN)的提示,但沒有得到任何更明智的結果。
在 R 中,它可以實現為“管道多重連接”
threeMonths <- February%>%
right_join(March)%>%
left_join(January)
我似乎無法翻譯成 Python。
如何獲得所需的 output?
您可以分兩步合並。 以三月為例:
tmp = pd.merge(january_df, february_df, on='ID')
final_df = pd.merge(tmp, march_df, on='ID', how='right')[['January', 'February', 'March', 'Product_no', 'Label', 'ID']].fillna(0)
print(final_df)
印刷:
January February March Product_no Label ID
0 1.0 2.0 5 T1 Towel 1005
1 0.0 0.0 1 E1 Earring 1006
2 3.0 4.0 1 S1 Shoe 1002
3 1.0 1.0 1 B3 Bag 1004
4 0.0 0.0 1 L1 Lotion 1007
5 4.0 3.0 1 B1 Ball 1000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.