假设有一个数据帧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
答案 0 :(得分:2)
这里的一种方法是使用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
答案 1 :(得分:1)
为了简单起见,这里我使用了基本的列操作。看看它是否对您有用:
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
答案 2 :(得分:1)
我认为最简单的答案是...。
from itertools import combinations
df = df.assign(**{(k1+k2): df[k1]*df[k2] for k1,k2 in combinations(df.columns,2)})
答案 3 :(得分:0)
在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