为了账号安全,请及时绑定邮箱和手机立即绑定

三个或更多熊猫数据框列的所有可能组合的乘法运算

三个或更多熊猫数据框列的所有可能组合的乘法运算

沧海一幻觉 2021-06-25 02:30:39
我有三个数据框:DT            D1        D2        D3        D4   UnknownCstep                                                   step 0  0.320039  0.048425  0.088292  0.085029  0.240678step 1  0.226455  0.236200  0.206625  0.165754  0.163254step 2  0.172478  0.199502  0.221124  0.266180  0.193045step 3  0.164097  0.209790  0.218212  0.309156  0.180891step 4  0.116930  0.306083  0.265747  0.173881  0.222132RE            E1        E2        E3   UnknownCstep                                         step 0  0.256725  0.086275  0.105281  0.244701step 1  0.213159  0.215714  0.142406  0.162372step 2  0.187955  0.222353  0.213388  0.192917step 3  0.164817  0.252570  0.372562  0.188435step 4  0.177344  0.223087  0.166364  0.211576DS            S1        S2        S3        S4   UnknownCstep                                                   step 0  0.210452  0.115157  0.019318  0.074852  0.261005step 1  0.228217  0.188214  0.248233  0.118122  0.150845step 2  0.189803  0.234401  0.303194  0.242742  0.185957step 3  0.197577  0.219602  0.246099  0.233097  0.184726step 4  0.173951  0.242626  0.183155  0.331187  0.217467我想要一个代码来做三个或更多 Panda 数据帧的所有可能组合的乘法运算。我想要一个通用代码来将列乘以任意数量的数据帧。这些数据框的所有可能组合是:[('D1', 'E1', 'S1') ('D1', 'E1', 'S2') ('D1', 'E1', 'S3') ('D1', 'E1', 'S4') ('D1', 'E1', 'Unknown') ('D1', 'E2', 'S1') ('D1', 'E2', 'S2') ('D1', 'E2', 'S3') ('D1', 'E2', 'S4') ('D1', 'E2', 'Unknown') ('D1', 'E3', 'S1') ('D1', 'E3', 'S2') ('D1', 'E3', 'S3') ('D1', 'Unknown', 'S1') ('D1', 'Unknown', 'S2') ('D1', 'Unknown', 'S4') ('D1', 'Unknown', 'Unknown') ('D2', 'E1', 'S1') ('D2', 'E1', 'S2') ('D2', 'E1', 'S3') ('D2', 'E1', 'S4') ('D2', 'E1', 'Unknown') ('D2', 'E2', 'S1') ('D2', 'E2', 'S2') ('D2', 'E2', 'S3') ('D2', 'E2', 'S4') ('D2', 'E2', 'Unknown') ('D2', 'E3', 'S1') ('D2', 'Unknown', 'S1') ('D2', 'Unknown', 'S2')
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

pd.concat

from functools import reduce

from operator import mul

from itertools import product


pd.concat({

    k: reduce(mul, (d[c] for d, c in zip([d1, d2, d3], k)))

    for k in product(d1, d2, d3)

}, axis=1)

              D1                                                                                              ...      Unknown                                                                                          

              E1                                                E2                                            ...           E3                                           Unknown                                        

              S1        S2        S3        S4   Unknown        S1        S2        S3        S4   Unknown    ...           S1        S2        S3        S4   Unknown        S1        S2        S3        S4   Unknown

step 0  0.017291  0.009462  0.001587  0.006150  0.021445  0.005811  0.003180  0.000533  0.002067  0.007207    ...     0.005333  0.002918  0.000489  0.001897  0.006614  0.012394  0.006782  0.001138  0.004408  0.015372

step 1  0.011016  0.009085  0.011982  0.005702  0.007281  0.011148  0.009194  0.012126  0.005770  0.007369    ...     0.005306  0.004376  0.005771  0.002746  0.003507  0.006050  0.004989  0.006580  0.003131  0.003999

step 2  0.006153  0.007599  0.009829  0.007869  0.006028  0.007279  0.008990  0.011628  0.009309  0.007132    ...     0.007819  0.009656  0.012490  0.009999  0.007660  0.007069  0.008729  0.011291  0.009040  0.006925

step 3  0.005344  0.005939  0.006656  0.006304  0.004996  0.008189  0.009102  0.010200  0.009661  0.007656    ...     0.013315  0.014800  0.016585  0.015709  0.012449  0.006735  0.007485  0.008389  0.007945  0.006297

step 4  0.003607  0.005031  0.003798  0.006868  0.004510  0.004538  0.006329  0.004778  0.008639  0.005673    ...     0.006428  0.008966  0.006768  0.012239  0.008036  0.008175  0.011403  0.008608  0.015565  0.010220


[5 rows x 100 columns]

Numpy 广播和 pandas.MultiIndex.from_product

a = v1[:, :, None, None] * v2[:, None, :, None] * v3[:, None, None, :]

a = a.reshape(len(a), -1)


cols = pd.MultiIndex.from_product([d1, d2, d3])


pd.DataFrame(a, d1.index, cols)


查看完整回答
反对 回复 2021-06-29
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信