2016-08-11 1 views
1

Ich habe zwei DataFrames und möchte subtrahieren.Subtrahierende Werte von verschiedenen Datenrahmen

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 

Als ich die gleichen Indizes haben, habe ich versucht zu tun: df1-df2, aber es hat nicht funktioniert.

Deshalb habe ich versucht, einen anderen Weg zu verwenden:

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'] 

Aber ich bin im Gegenzug Datenrahmen mit NaN-Werte zu bekommen. Ich weiß nicht, warum es passiert. Alle Hinweise werden sehr geschätzt.

Antwort

1

können Sie pd.DataFrame.sub verwenden, wie folgt aus:

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

Dank verwenden können! Es funktioniert! Obwohl ich versuche zu verstehen, warum meine Art der Implementierung nicht funktioniert. s das Problem mit einer anderen Anzahl von Spalten in diesen beiden Dataframes? Ich möchte auch zwei erste Spalten überspringen, während ich subtrahiere. Ich habe versucht, es zu tun: df1.ix ['Val1':]. Sub (df2.Bench.values, Achse = 0), aber ich bekomme wieder Fehler. – Monica

+1

@Monica Gern geschehen. Über Ihren ersten Punkt - es versucht einen Join zu machen, um gleichnamige Spalten zu subtrahieren, aber es gibt keine. Über Ihren zweiten Punkt - Sie haben eine merkwürdige Indexsache. Darf ich Sie bitten, eine separate Frage zu diesem Thema zu stellen? Es ist eine separate Frage, und für sich selbst interessant. Wenn du willst, gib hier einen Link an und ich werde mich freuen, dort zu schreiben. –

+1

@Monica In jedem Fall sind das keine Spalten, sie sind Teil des Indexes. Probiere 'df1.index = range (5)' und schau was passiert. –

0

Sie

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