如何计算平均值同时包含np.nan公司使用np.平均值?(使用groupby时)

2024-05-19 22:46:35 发布

您现在位置:Python中文网/ 问答频道 /正文

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(10).reshape(-1, 2), columns=['A', 'B'])
df['C']=[5,2,np.nan,4,np.nan]
df['index']=df.index

数据帧:

  A  B   C   index
0 0  1   5     0
1 2  3   2     1
2 4  5   NaN   2
3 6  7   4     3
4 8  9   NaN   4

我想使用groupby函数来计算每个索引的“A”“B”“C”的平均值。你知道吗

df1 = df.groupby('index')
average = df1.apply(lambda df,x,y :np.average(df.iloc[:,x:y]),0,3)

平均值:

index
0     2.00
1     2.33
2     NaN
3     5.67
4     NaN
dtype:float64

我想做的是:

  1. 当A B C是数字时,平均值=(A+B+C)/3

  2. 当ABC之一np.nan公司,平均值=sum/2


Tags: importnumpydataframepandasdfindexasnp
2条回答

为什么使用numpy而不是pandas.mean()?你知道吗

df
Out[207]: 
   A  B    C
0  0  1  5.0
1  2  3  2.0
2  4  5  NaN
3  6  7  4.0
4  8  9  NaN

In [210]: df.mean(axis=1)
Out[210]: 
0    2.000000
1    2.333333
2    4.500000
3    5.666667
4    8.500000
dtype: float64

它只做您需要的事情,并且也适用于groupby对象。你知道吗

您可以使用自定义函数:

可以使用^{}-NaN省略:

#groupby by index
df1 = df.groupby(level=0)
#groupby by column index
#df1 = df.groupby('index')

#filter columns for apply first, item() is for return scalar
average = df1['A','B','C'].apply(lambda x: x.mean(axis=1).item())
print (average)
0    2.000000
1    2.333333
2    4.500000
3    5.666667
4    8.500000
dtype: float64

或者是来自Paul Panzer comment的想法:

df1 = df.groupby(level=0)
average = df1['A','B','C'].apply(np.nanmean)
print (average)
0    2.000000
1    2.333333
2    4.500000
3    5.666667
4    8.500000
dtype: float64

另外groupby不是必需的,只选择所需的列并将^{}axis=1一起使用:

df['new'] = df[['A','B','C']].mean(axis=1)
print (df)
   A  B    C  index       new
0  0  1  5.0      0  2.000000
1  2  3  2.0      1  2.333333
2  4  5  NaN      2  4.500000
3  6  7  4.0      3  5.666667
4  8  9  NaN      4  8.500000

print (df)
   A  B    C
0  0  1  5.0
1  2  3  2.0
2  4  5  NaN
3  6  7  4.0
4  8  9  NaN

#if need mean of all columns
df['new'] = df.mean(axis=1)
print (df)
   A  B    C       new
0  0  1  5.0  2.000000
1  2  3  2.0  2.333333
2  4  5  NaN  4.500000
3  6  7  4.0  5.666667
4  8  9  NaN  8.500000

相关问题 更多 >