2017-10-04 5 views
0

Ich habe einen df der wie folgt aussieht:Operationen mit Spalten in Pandas

I_0 I_1 I_2 10 20 30 SF 
q 
0 2 3 4 5 1 1 0.2 
1 5 4 3 4 7 8 0.3 
2 4 8 7 9 8 7 0.4 

Ich mag würde Operationen darauf, wie machen:

  • multiplicate Spalten 10, 20 und 30 durch SF
  • subtrahieren Sie diese neuen Spalten von I_0, I_1 und I_2.

Zum Beispiel:

I_0 - (column 10 * SF) 
I_1 - (column 20 * SF) 
I_2 - (column 30 * SF) 

und benennen Sie anschließend die berechneten Spalten I_0_sub, I_1_sub und I_2_sub.

habe ich versucht, diese so weit:

df = pd.merge(df1, df2, how = "left", left_index = True, right_index = True) 
df["SF"] = df["I_q_2"]/df[10] 
test = df.subtract(df2*SF, axis=0) 
test.drop(labels=["10", "20", "30", "SF"], axis = "columns", inplace = True) 
test = test.add_suffix("_sub") 

NaN Einsteigen für df.

Jede Hilfe wäre willkommen.

Antwort

2

Verwenden filter für ausgewählte Spalten beginnen mit I:

df1 = df.filter(regex='^I') 
print (df1) 
    I_0 I_1 I_2 
q    
0 2 3 4 
1 5 4 3 
2 4 8 7 

Dann wählen Sie Spalten von Teilmenge und mehr von mul:

df2 = df[["10", "20", "30"]].mul(df["SF"], axis=0) 
print (df2) 
    10 20 30 
q    
0 1.0 0.2 0.2 
1 1.2 2.1 2.4 
2 3.6 3.2 2.8 

Last subtrahiert von sub - aber Spalten sind unterschiedlich, so konvertieren Werte zu numpy array:

df = df1.sub(df2.values, 0).add_suffix('_sub') 
print (df) 
    I_0_sub I_1_sub I_2_sub 
q       
0  1.0  2.8  3.8 
1  3.8  1.9  0.6 
2  0.4  4.8  4.2 

Wenn Spaltennamen nicht gleiche in beiden dfNaN s erhalten, da die Daten nicht ausgerichtet sind:

print (df1.sub(df2, axis=0)) 
    10 20 30 I_0 I_1 I_2 
q       
0 NaN NaN NaN NaN NaN NaN 
0 NaN NaN NaN NaN NaN NaN 
2 NaN NaN NaN NaN NaN NaN 
Verwandte Themen