簡體   English   中英

三個數據框的交叉連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM