繁体   English   中英

Python:如何在熊猫中将列彼此相乘?

[英]Python: how multiply columns with each others in pandas?

假设具有如下数据框df

df
   A   B   C
0  2   3   1
1  1   0   1
2  0   2   1
3  1   2   2

我想添加列作为彼此之间的乘法

df
   A   B   C   AB  AC  BC
0  2   3   1   6   2   3 
1  1   0   1   0   1   0
2  0   2   1   0   0   2
3  1   2   2   2   2   4

一种方法是使用itertools.combinations获取列名称组合,并将其乘积包含在列表推导中:

from itertools import combinations
combs = list(map(list,list(combinations(df.columns.tolist(), 2))))
# [['A', 'B'], ['A', 'C'], ['B', 'C']]
new_cols = pd.concat([df[c].prod(1) for c in combs], axis=1)
new_cols.columns = [''.join(i) for i in combs]
df.assign(**new_cols)

   A  B  C  AB  AC  BC
0  2  3  1   6   2   3
1  1  0  1   0   1   0
2  0  2  1   0   0   2
3  1  2  2   2   2   4

在这里,为了简单起见,我使用了基本的列操作。 看看是否适合您:

import pandas as pd
df = pd.DataFrame({
    'A':[2,1,0,1],
    'B':[3,0,2,2],
    'C':[1,1,1,2]
})
df['AB']=df['A']*df['B']
df['AC']=df['A']*df['C']
df['BC']=df['B']*df['C']
df

输出

A   B   C   AB  AC  BC
0   2   3   1   6   2   3
1   1   0   1   0   1   0
2   0   2   1   0   0   2
3   1   2   2   2   2   4

我认为最简单的答案是...

from itertools import combinations
df = df.assign(**{(k1+k2): df[k1]*df[k2] for k1,k2 in combinations(df.columns,2)})

使用DataFrame.reindex通过MultiIndex.from_tuplescombinations ,多由DataFrame.mul和最后通过加入DataFrame.join以原文:

from  itertools import combinations

c = pd.MultiIndex.from_tuples(combinations(df.columns, 2))
df1 = df.reindex(c, axis=1, level=0).mul(df.reindex(c, axis=1, level=1))
df1.columns = df1.columns.map(''.join)

df = df.join(df1)
print (df)
   A  B  C  AB  AC  BC
0  2  3  1   6   2   3
1  1  0  1   0   1   0
2  0  2  1   0   0   2
3  1  2  2   2   2   4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM