我有一些数据框,我想在其上做一些groupby-apply:
dftest = df1.append(test2).set_index('date')
doWhat = {'foo' : np.sum, 'bar': np.sum, 'employment_total' : np.mean}
employment_total
在某些地方NaN
,但不是到处都是:
>>> sum(np.isnan(dftest.employment_total))
404394
>>> sum(np.isnan(dftest.employment_total) == False)
6864
但是,当我创建月平均值时,到处都是NaN
- 我猜是因为我使用的是np.mean
:
aggASS = dftest.groupby(['state', pd.TimeGrouper("M", label='left'), 'status']).agg(doWhat)
>>> aggASS.loc[np.isnan(aggASS.employment_total) == False]
Empty DataFrame
Columns: [shopping_weighted, employment_total]
Index: []
我需要使用doWhat
,因为我对不同的列使用不同的聚合度量。我尝试在计算之前找到删除pandas.mean
的{{1}}函数,但我无法找到它。它在哪里?
答案 0 :(得分:2)
您可以将均值参数作为字符串'mean'
传递,它将使用the pandas version,默认情况下会跳过nans。
import pandas as pd
df = pd.DataFrame(data={'x':[1, 2, 3, 4, pd.np.nan], 'y':['a', 'a', 'a', 'b', 'b']})
funcs = {'x':'mean'}
print(df.groupby('y').agg(funcs))
# x
# y
# a 2
# b 4