Zhu*_*arb 9 python numpy aggregate nan pandas
我汇总了我的Pandas数据帧:data.具体来说,我希望amount通过[ origin和type]的元组得到平均值和总和.为了平均和求和,我尝试了下面的numpy函数:
import numpy as np
import pandas as pd
result = data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum, pd.Series.mean]}).reset_index()
Run Code Online (Sandbox Code Playgroud)
我的问题是该amount列包含NaNs,这导致result上述代码具有大量的NaN平均值和总和.
我知道这两个pd.Series.sum和pd.Series.mean具有skipna=True默认情况下,所以为什么我仍然得到NaN下面就?
我也试过这个,这显然不起作用:
data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum(skipna=True), pd.Series.mean(skipna=True)]}).reset_index()
Run Code Online (Sandbox Code Playgroud)
编辑:
根据@ Korem的建议,我也尝试使用partial如下:
s_na_mean = partial(pd.Series.mean, skipna = True)
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index()
Run Code Online (Sandbox Code Playgroud)
但得到这个错误:
error: 'functools.partial' object has no attribute '__name__'
Run Code Online (Sandbox Code Playgroud)
from numpy import nansum
from numpy import nanmean
data.groupby(groupbyvars).agg({'amount': [ nansum, nanmean]}).reset_index()
Run Code Online (Sandbox Code Playgroud)
作为numpy旧版本的解决方法,也是修复上次尝试的方法:
当你这样做时,pd.Series.sum(skipna=True)你实际上调用了该方法.如果你想这样使用它你想要定义一个部分.所以,如果你没有nanmean,让我们定义s_na_mean并使用它:
from functools import partial
s_na_mean = partial(pd.Series.mean, skipna = True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13125 次 |
| 最近记录: |