亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有 Pandas 的高性能笛卡爾積(CROSS JOIN)

帶有 Pandas 的高性能笛卡爾積(CROSS JOIN)

神不在的星期二 2021-09-11 20:00:19
這篇文章的內容最初是作為Pandas Merging 101的一部分 ,但由于完全公正地處理該主題所需的內容的性質和大小,它已移至其自己的 QnA。給定兩個簡單的 DataFrame;left = pd.DataFrame({'col1' : ['A', 'B', 'C'], 'col2' : [1, 2, 3]})right = pd.DataFrame({'col1' : ['X', 'Y', 'Z'], 'col2' : [20, 30, 50]})left  col1  col20    A     11    B     22    C     3right  col1  col20    X    201    Y    302    Z    50可以計算這些幀的叉積,如下所示:A       1      X      20A       1      Y      30A       1      Z      50B       2      X      20B       2      Y      30B       2      Z      50C       3      X      20C       3      Y      30C       3      Z      50計算此結果的最高效方法是什么?
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

在熊貓 1.2.0 之后merge現在有選項cross


left.merge(right, how='cross')

使用itertools product和重新創建數據幀中的值


import itertools

l=list(itertools.product(left.values.tolist(),right.values.tolist()))

pd.DataFrame(list(map(lambda x : sum(x,[]),l)))

   0  1  2   3

0  A  1  X  20

1  A  1  Y  30

2  A  1  Z  50

3  B  2  X  20

4  B  2  Y  30

5  B  2  Z  50

6  C  3  X  20

7  C  3  Y  30

8  C  3  Z  50


查看完整回答
反對 回復 2021-09-11
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

這是三重的方法 concat


m = pd.concat([pd.concat([left]*len(right)).sort_index().reset_index(drop=True),

       pd.concat([right]*len(left)).reset_index(drop=True) ], 1)


    col1  col2 col1  col2

0     A     1    X    20

1     A     1    Y    30

2     A     1    Z    50

3     B     2    X    20

4     B     2    Y    30

5     B     2    Z    50

6     C     3    X    20

7     C     3    Y    30

8     C     3    Z    50

http://img1.sycdn.imooc.com//613c9a8f00010aad04960345.jpg

查看完整回答
反對 回復 2021-09-11
  • 3 回答
  • 0 關注
  • 407 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號