2016-09-12 2 views
-2

У меня есть pandas df с колонкой, T max & T min. Я хочу рассчитать T mean следующего столбца. Я сделал это с df['T mean']= df[['T max','T min']].mean(axis=1), но не получилось. Я получил T max как T mean. Может ли кто-нибудь помочь мне?Как вычислить рядовой показатель в кадре данных panda?

+2

Пожалуйста, предоставляя образец dataframe работать. –

+3

Опубликовать необработанные данные, ваш код, желаемый результат и ваш ошибочный вывод – EdChum

ответ

1

Я думаю, что есть проблема с колонкой T min - type значений string, а не числовых. Так что вам нужно бросить его astype:

Пример:

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 

Если astype возвращаемая ошибка:

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

это означает, что в колонке T min, по крайней мере один недопустимое значение.

Пример:

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

Я передал колонку в int, и она сработала. Спасибо ! –

Смежные вопросы