【发布时间】:2020-05-16 16:21:15
【问题描述】:
我一直在尝试优化散景服务器,以计算 Covid19 上所选国家/地区的实时统计数据。
我发现自己重复了一个 groupby 函数来计算新列,并且想知道,在选择了 groupby 之后,是否可以以类似于 .agg() 的方式在多个列上应用它?
例如:
dfall = pd.DataFrame(db("SELECT * FROM C19daily"))
dfall.set_index(['geoId', 'date'], drop=False, inplace=True)
dfall = dfall.sort_index(ascending=True)
dfall.head()
id date geoId cases deaths auid
geoId date
AD 2020-03-03 70119 2020-03-03 AD 1 0 AD03/03/2020
2020-03-14 70118 2020-03-14 AD 1 0 AD14/03/2020
2020-03-16 70117 2020-03-16 AD 3 0 AD16/03/2020
2020-03-17 70116 2020-03-17 AD 9 0 AD17/03/2020
2020-03-18 70115 2020-03-18 AD 0 0 AD18/03/2020
我需要根据“病例”和“死亡”创建新列,并应用 cumsum() 等各种函数。目前我这样做很长的路要走
dfall['ccases'] = dfall.groupby(level=0)['cases'].cumsum()
dfall['dpc_cases'] = dfall.groupby(level=0)['cases'].pct_change(fill_method='pad', periods=7)
.....
dfall['cdeaths'] = dfall.groupby(level=0)['deaths'].cumsum()
dfall['dpc_deaths'] = dfall.groupby(level=0)['deaths'].pct_change(fill_method='pad', periods=7)
我尝试像这样优化 groupby 调用:-
with dfall.groupby(level=0) as gr:
gr = g['cases'].cumsum()...
但是错误提示这个类不支持这个
AttributeError: __enter__
我认为我可以使用 .agg({}) 并提供字典
g = dfall.groupby(level=0).agg({'cc' : 'cumsum', 'cd' : 'cumsum'})
但这会产生另一个错误
pandas.core.base.SpecificationError: nested renamer is not supported
我还有很多其他的地方要优化,我认为这个 python 部分会是最简单的并且可以节省几毫秒!
有人能把我推到正确的方向吗?
【问题讨论】:
标签: pandas-groupby