gpt4 book ai didi

pandas - 获取 Pandas 数据框的多列(笛卡尔积)的组合?

转载 作者:行者123 更新时间:2023-12-02 03:29:58 24 4
gpt4 key购买 nike

So I have a dataframe representing various model estimates for the likelihood of each of a group of candidates winning an election.

             Steve     John      
Model1 0.327586 0.289474
Model2 0.322581 0.285714
Model3 0.303030 0.294118

我想要一个数据框来表示跨列的模型值的所有组合,即所有列的笛卡尔积。所以上面的会变成下面的。

             model Steve     value Steve    model John     value John     
0 Model1 0.327586 Model1 0.289474
1 Model1 0.327586 Model2 0.285714
2 Model1 0.327586 Model3 0.294118
3 Model2 0.322581 Model1 0.289474
4 Model2 0.322581 Model2 0.285714
5 Model2 0.322581 Model3 0.294118
6 Model3 0.303030 Model1 0.289474
7 Model3 0.303030 Model2 0.285714
8 Model3 0.303030 Model3 0.294118

上面是简单的情况,但理论上我希望能够对 N 个模型和 M 个候选者执行此操作,从而得到一个具有 N^M 行和 2M 列的数据框(实际上 N < 20,M < 6).

在寻找答案时,我看到了很多关于 itertools 模块的建议,但无法弄清楚如何在多个列表中获得所有组合(itertools.combinations 似乎只适用于在单个列表中查找所有组合)。

最佳答案

使用:

from  itertools import product

#get all combinations of all columns
a = product(*[zip(df.index, x) for x in df.T.values])
#create new columns names
cols = [c for x in df.columns for c in ('model_' + x, 'value_' + x)]
#flattening nested lists with DataFrame contructor
df1 = pd.DataFrame([[y for x in z for y in x] for z in a], columns=cols)
print (df1)
model_Steve value_Steve model_John value_John
0 Model1 0.327586 Model1 0.289474
1 Model1 0.327586 Model2 0.285714
2 Model1 0.327586 Model3 0.294118
3 Model2 0.322581 Model1 0.289474
4 Model2 0.322581 Model2 0.285714
5 Model2 0.322581 Model3 0.294118
6 Model3 0.303030 Model1 0.289474
7 Model3 0.303030 Model2 0.285714
8 Model3 0.303030 Model3 0.294118

关于pandas - 获取 Pandas 数据框的多列(笛卡尔积)的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com