2016-08-11 43 views
1

我得到了兩個DataFrame並想減去。從不同DataFrame中提取值

DF1:

   Val1   Val2  Val3  
0 -27 -0.8 -6.786321 -7.024615 -13.946589 
1 -27 -0.9 -5.746795 -5.804550 -11.576365 
2 -27 -1.0 -4.624857 -4.372321 -9.103681 
3 -27 -1.2 -2.685832 -2.418888 -5.057056 
4 -27 -1.4 -1.445561 -1.389468 -2.622357 

DF2:

 Bench 
0  0.4601 
1  -5.3336 
2  -6.0163 
3  -4.1776 
4  -2.3472 

由於我有同樣的指標,我試圖做:df1-df2,但沒有奏效。

所以我試圖用另一種方式:

headers = list(df1.columns.values) 
    filtr_headers = filter(lambda x: x!='',headers) 
     for i in filtr_headers: 
       df1['%s' %(i)] = df1['%s' %(i)] - df2['Bench'] 

但我與NaN值返回數據幀獲得。我不知道爲什麼會發生。任何提示將受到高度讚賞。

回答

1

您可以使用pd.DataFrame.sub,像這樣:

In [113]: df1.sub(df2.Bench.values, axis=0) 
Out[113]: 
       Val1  Val2  Val3 
0 -27 -0.8 -7.246421 -7.484715 -14.406689 
1 -27 -0.9 -0.413195 -0.470950 -6.242765 
2 -27 -1.0 1.391443 1.643979 -3.087381 
3 -27 -1.2 1.491768 1.758712 -0.879456 
4 -27 -1.4 0.901639 0.957732 -0.275157 
+0

謝謝!它解決了!儘管我試圖理解爲什麼我的實施方式不起作用。在這兩個數據框中有不同數量的列的問題?我也想在減去時跳過兩個第一列。我試圖做到這一點:df1.ix ['Val1':]。sub(df2.Bench.values,axis = 0),但我再次出現錯誤。 – Monica

+1

@Monica不客氣。關於你的第一點 - 它試圖做一個連接來減去同名列,但是沒有。關於你的第二點 - 你有一個奇怪的索引事情繼續。我可以請求你另外提出一個關於它的問題嗎?這是一個單獨的問題,本身就很有趣。如果你願意,可以在這裏下載一個鏈接,我很樂意在那裏寫下。 –

+1

@Monica在任何情況下,這些都不是列,它們是索引的一部分。試試'df1.index = range(5)'看看會發生什麼。 –

0

您可以使用

pd.DataFrame(df1.values - df2.values)