作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!