我拥有3D数据量,但无法安装推荐的熊猫xarray package。
| a b c
-----------------
0 | 5 9 2
1 | 6 9 5
2 | 1 6 8
| a b c
-----------------
0 | y y y
1 | y n y
2 | n n y
我知道我可以像这样获得df_values
中所有值的平均值。
df_values.stack().mean()
问题...
在average of df_values
中找到df_condition == "y"
的最简单方法是什么?
答案 0 :(得分:1)
IIUC布尔掩码
df[c.eq('y')].mean().mean()
6.5
或者您可能想要
df[c.eq('y')].sum().sum()/c.eq('y').sum().sum()
5.833333333333333
答案 1 :(得分:1)
假设您希望在df_condition == 'y'
处找到所有值的平均值:
res = np.nanmean(df_values[df_condition.eq('y')]) #5.833333333333333
使用NumPy比熊猫stack
或where
便宜得多:
# Pandas 0.23.0, NumPy 1.14.3
n = 10**5
df_values = pd.concat([df_values]*n, ignore_index=True)
df_condition = pd.concat([df_condition]*n, ignore_index=True)
%timeit np.nanmean(df_values.values[df_condition.eq('y')]) # 32 ms
%timeit np.nanmean(df_values.where(df_condition == 'y').values) # 88 ms
%timeit df_values[df_condition.eq('y')].stack().mean() # 107 ms
答案 2 :(得分:1)
仅使用如下所示的pandas DataFrame和Series方法,即可获取条件为“ y”的所有值的平均值。
df_values[df_condition.eq('y')].stack().mean() # 5.833333333333333
或
df_values[df_condition == 'y'].stack().mean() # 5.833333333333333
这很简单吗? :)
答案 3 :(得分:1)
尝试:
np.nanmean(df.where(dfcon == 'y').values)
输出:
5.8333333333