2017-07-16 41 views
1

我有兩個不同的Python DataFrames(即,大小爲2×2),如下所示:級聯Python數據

Mangoes Apples 
Mangoes Apples 

和,

1   0 
0   1 

我打算以產生第三數據幀,所以輸出可能是:

Mangoes  0 
0  Apples 

顯然,我不能乘以這兩個數據幀(我希望我能做到)。那麼,這樣做的最好方法是什麼?這是可以通過串聯完成的嗎?或者我應該開始爲每個DataFrame逐項迭代並將值存儲到第三個DataFrame中。

回答

0

一種可能方式可能如下:

print(df1) 

輸出:

  0  1 
0 Mangoes Apples 
1 Mangoes Apples 

其它dataframe

print(df2) 

輸出:

0 1 
0 1 0 
1 0 1 

然後:

df_new = (df1*df2).replace('',0) 
print(df_new) 

輸出:

  0  1 
0 Mangoes  0 
1  0 Apples 
+0

謝謝你的指導。我嘗試過使用這種方式,並且得到一個錯誤,「TypeError:不能通過'str'類型的非整數來乘序列。 – John

+0

@John可能的原因是'df2'的數據類型不是'integer'或'float',而是'string'。所以,錯誤是關於試圖乘以兩個'string'。在上面的例子中,你可以驗證'df2'的數據類型嗎?您可以嘗試通過'df2 = df2.apply(pd.to_numeric)'將整個'df2'轉換爲數字,然後查看'df_new =(df1 * df2).replace('',0)'是否有效。爲了進行簡單的測試,您可以嘗試運行芒果* 1,並與芒果* 1'進行比較。如你所說,後者可能會給出同樣的錯誤。 – 0p3n5ourcE

+0

是的,這是數據類型爲d2的問題......已解決。順便說一下,你可以在這一行詳細說明一下... df_new =(df1 * df2).replace('',0)...究竟是什麼('',0)在做什麼 – John

1

假設兩者的DF具有相同的列名和索引:

In [123]: d1[d2.eq(1)].combine_first(d2) 
Out[123]: 
     0  1 
0 Mangoes  0 
1  0 Apples 

來源的DF:

D1:

In [124]: d1 
Out[124]: 
     0  1 
0 Mangoes Apples 
1 Mangoes Apples 

D2:

In [125]: d2 
Out[125]: 
    0 1 
0 1 0 
1 0 1