Python Pandas基于列进行乘法并添加后缀

时间:2017-07-09 09:24:59

标签: python pandas

我有两个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_xB_xC_xdf1df2中对齐列的产物

    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

1 个答案:

答案 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