[英]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_tuples
和combinations
,多由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.