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

我有三个数据框:


DT            D1        D2        D3        D4   Unknown

Cstep                                                   

step 0  0.320039  0.048425  0.088292  0.085029  0.240678

step 1  0.226455  0.236200  0.206625  0.165754  0.163254

step 2  0.172478  0.199502  0.221124  0.266180  0.193045

step 3  0.164097  0.209790  0.218212  0.309156  0.180891

step 4  0.116930  0.306083  0.265747  0.173881  0.222132


RE            E1        E2        E3   Unknown

Cstep                                         

step 0  0.256725  0.086275  0.105281  0.244701

step 1  0.213159  0.215714  0.142406  0.162372

step 2  0.187955  0.222353  0.213388  0.192917

step 3  0.164817  0.252570  0.372562  0.188435

step 4  0.177344  0.223087  0.166364  0.211576


DS            S1        S2        S3        S4   Unknown

Cstep                                                   

step 0  0.210452  0.115157  0.019318  0.074852  0.261005

step 1  0.228217  0.188214  0.248233  0.118122  0.150845

step 2  0.189803  0.234401  0.303194  0.242742  0.185957

step 3  0.197577  0.219602  0.246099  0.233097  0.184726

step 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')


沧海一幻觉
浏览 158回答 1
1回答

慕田峪7331174

pd.concatfrom functools import reducefrom operator import mulfrom itertools import productpd.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   Unknownstep 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.015372step 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.003999step 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.006925step 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.006297step 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_producta = 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python