我有两个DataFrame
个对象,我想根据列名称进行乘法运算,并输出带有后缀的新列...
df1 = pd.DataFrame(np.random.randint(0,10, size=(5,5)), columns=list('ABCDE'))
A B C D E
0 6 2 1 7 2
1 0 0 2 1 8
2 7 2 6 6 9
3 2 5 5 1 3
4 9 1 6 7 4
df2 = pd.DataFrame(np.random.randint(1, 10, size=(5,3)), columns=list('ABC'))
A B C
0 2 1 2
1 7 5 1
2 2 1 4
3 7 8 5
4 9 2 2
我希望输出列为列A_x
,B_x
和C_x
是df1
和df2
中对齐列的产物
A B C A_x B_x C_x D E
0 6 2 1 12 2 2 7 2
1 0 0 2 0 0 2 1 8
2 7 2 6 14 2 24 6 9
3 2 5 5 14 40 25 1 3
4 9 1 6 81 2 12 7 4
答案 0 :(得分:4)
您可以使用intersection
获取相同的列名称,然后使用mul
多个,添加add_suffix
和上一个concat
df1
:
cols = df1.columns.intersection(df2.columns)
df = df1[cols].mul(df2[cols], axis=1).add_suffix('_x')
df = pd.concat([df1, df], axis=1)
print (df)
A B C D E A_x B_x C_x
0 6 2 1 7 2 12 2 2
1 0 0 2 1 8 0 0 2
2 7 2 6 6 9 14 2 24
3 2 5 5 1 3 14 40 25
4 9 1 6 7 42 81 2 12
如果需要更改列的顺序:
cols = df1.columns.intersection(df2.columns)
df = df1[cols].mul(df2[cols], axis=1).add_suffix('_x')
cols1 = cols.tolist() + \
df.columns.tolist() + \
df1.columns.difference(df2.columns).tolist()
df = pd.concat([df1, df], axis=1)
print (df[cols1])
A B C A_x B_x C_x D E
0 6 2 1 12 2 2 7 2
1 0 0 2 0 0 2 1 8
2 7 2 6 14 2 24 6 9
3 2 5 5 14 40 25 1 3
4 9 1 6 81 2 12 7 42