我汇总了我的Pandas数据框:data
。具体而言,我想通过元组 [origin
和 type
] 来获取 amount
的平均值和总和。为了求平均值和总和,我尝试了以下 numpy 函数:
import numpy as np
import pandas as pd
result = data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum, pd.Series.mean]}).reset_index()
我的问题是amount
列包含了NaN
,这导致以上代码的结果
有很多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()
编辑:根据@Korem的建议,我也尝试使用了下面的 partial
:
s_na_mean = partial(pd.Series.mean, skipna = True)
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index()
但是会收到以下错误:
error: 'functools.partial' object has no attribute '__name__'
pd.Series.sum
,而是使用'sum'
- 代码应该采用更快的路径。 - chrisbpd.Series.sum
,因为它有一个skipna
选项。阅读@Korem的答案后,我现在使用np.nansum
。但是我的numpy版本(1.7.1)中没有np.nanmean
。我将尝试发布代表性数据,这可能需要一些时间。 - Zhubarb