2016-09-12 3 views
-2

Ich habe Pandas df mit Spalte, T max & T min. Ich möchte in der nächsten Spalte T mean berechnen. Ich habe mit dieser df['T mean']= df[['T max','T min']].mean(axis=1) aber nicht funktioniert. Ich habe T max als T mean. Könnte mir jemand helfen?Wie berechnet man Reihen-Durchschnitt in Panda-Datenrahmen?

+2

Bitte um eine Probe Datenrahmen bereitstellt, mit zu arbeiten. –

+3

Post Rohdaten, Ihren Code, gewünschte Ausgabe und Ihre fehlerhafte Ausgabe – EdChum

Antwort

1

Ich denke, es gibt ein Problem mit Spalte T min - type von Werten ist string, nicht numerisch. So müssen Sie es von astype Stimmen:

Probe:

df=pd.DataFrame({'T max':[1,2,3],'T min':['5','6','7']}) 
print (df) 
    T max T min 
0  1  5 
1  2  6 
2  3  7 

print (type(df.ix[0,'T min'])) 
<class 'str'> 

df['T mean']= df[['T max','T min']].mean(axis=1) 
print (df) 
    T max T min T mean 
0  1  5  1.0 
1  2  6  2.0 
2  3  7  3.0 

#cast column to int 
df['T min'] = df['T min'].astype(int) 

print (type(df.ix[0,'T min'])) 
<class 'numpy.int32'> 

df['T mean new']= df[['T max','T min']].mean(axis=1) 
print (df) 
    T max T min T mean T mean new 
0  1  5  1.0   3.0 
1  2  6  2.0   4.0 
2  3  7  3.0   5.0 

Wenn astype Return-Fehler:

ValueError: invalid literal for int() with base 10: 'aaa'

es in Spalte bedeutet T min mindestens ein ungültiger Wert.

Probe:

df=pd.DataFrame({'T max':[1,2,3],'T min':['5','6','aaa']}) 
print (df) 
    T max T min 
0  1  5 
1  2  6 
2  3 aaa 

df['T mean']= df[['T max','T min']].mean(axis=1) 
print (df) 
    T max T min T mean 
0  1  5  1.0 
1  2  6  2.0 
2  3 aaa  3.0 

#check invalid rows where is bad value in T min 
print (df[ pd.to_numeric(df['T min'], errors='coerce').isnull()]) 
    T max T min T mean 
2  3 aaa  3.0 

#replace invlid value to NaN 
df['T min'] = pd.to_numeric(df['T min'], errors='coerce') 

df['T mean new']= df[['T max','T min']].mean(axis=1) 
print (df) 
    T max T min T mean T mean new 
0  1 5.0  1.0   3.0 
1  2 6.0  2.0   4.0 
2  3 NaN  3.0   3.0 
+0

Ich warf Spalte zu int und es hat funktioniert. Vielen Dank ! –