python - 如何将许多列的产品创建为新列 pandas

标签 python python-3.x pandas

我有一个 pandas 数据框:

 import pandas as pd

 df = pd.DataFrame({'dummy_1' : [0, 0, 0, 1, 1, 0],
                    'dummy_2' : [1, 1, 0, 0, 1, 1],
                    'dummy_3' : [1, 1, 1, 0, 0, 0]})

我想将产品添加为新列(在同一数据框中),每一列的产品,以及其他两列。

因此生成的数据框看起来像这样:

df = pd.DataFrame({     'dummy_1' : [0, 0, 0, 1, 1, 0],
                        'dummy_2' : [1, 1, 0, 0, 1, 1],
                        'dummy_3' : [1, 1, 1, 0, 0, 0],
                        'dummy_12' :[0, 0, 0, 0, 1, 0],
                        'dummy_13' :[0, 0, 0, 0, 0, 0],
                        'dummy_23' :[1, 1, 0, 0, 0, 0]})

有没有一种有效的方法来做到这一点?高效的意思是一种适用于例如的方式。 50 列

最佳答案

使用 itertools.combinations 获取所有组合并遍历这些组合以计算向量化乘积并分配给新列

import pandas as pd
from itertools import combinations
df = pd.DataFrame({'dummy_1' : [0, 0, 0, 1, 1, 0],
                'dummy_2' : [1, 1, 0, 0, 1, 1],
                'dummy_3' : [1, 1, 1, 0, 0, 0]})
for i in combinations(df.columns, 2):
    col_name = i[0] + i[1].split('_')[-1]
    df[col_name] = df[i[0]] * df[i[1]]

输出

dummy_1 dummy_2 dummy_3 dummy_12    dummy_13    dummy_23
0       1       1       0           0           1
0       1       1       0           0           1
0       0       1       0           0           0
1       0       0       0           0           0
1       1       0       1           0           0
0       1       0       0           0           0

关于python - 如何将许多列的产品创建为新列 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633917/

相关文章:

python-3.x - 在 awsglue 中更改动态框架特定列的数据类型

python - Pandas 列出两列之间的相似度

python - Pandas导入CSV和Excel文件报错

python - 导入 flask.ext 引发 ModuleNotFoundError

python - Pandas if/then 聚合

Python 从递归 DFS 返回一个元素

python - 如何在列表中选择随机位置,翻转位,然后浏览下一个项目

python - Dask groupby apply 行为异常

python-3.x - 从特定日期开始的年度值

Python:绘制直方图,其中 y 值小于 1