2017-07-09 101 views
1

我有兩個DataFrame對象,我想基於列名和輸出帶有後綴的新列乘...Python的大熊貓繁殖基於列,並添加後綴

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 

我想輸出被列爲在df1B_xA_x,和C_x是所述對準柱的產物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 

回答

3

可以使用intersection爲獲得相同的列名,然後通過多次mul,加add_suffix和最後concatdf1

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 
+0

'.add_suffix()'正是我尋找! –