python - python和数据框:按周分组并计算总和和差异
问题描述
我有一个包含以下列的数据框:
DATE ALFA BETA
2016-04-26 1 3
2016-04-27 3 0
2016-04-28 0 8
2016-04-29 4 2
2016-04-30 3 1
2016-05-01 -2 -5
2016-05-02 3 0
2016-05-03 3 3
2016-05-08 1 7
2016-05-11 3 1
2016-05-12 10 1
2016-05-13 4 2
我想将数据分组在每周范围内,但对 alpha 和 beta 列进行不同的处理。我想计算ALFA
每周列中数字的总和,而对于BETA
列,我想计算一周开始和结束之间的差异。我向您展示了预期结果的示例。
DATE sum_ALFA diff_BETA
2016-04-26 12 3
2016-05-03 4 4
2016-05-11 17 1
我试过这段代码,但它计算每列的总和
df = df.resample('W', on='DATE').sum().reset_index().sort_values(by='DATE')
这是我的数据集https://drive.google.com/uc?export=download&id=1fEqjINx9R5io7t_YxA9qShvNDxWRCUke
解决方案
我想我在这里有不同的语言环境(因此我的一周不同),你可以这样做:
df.resample("W", on="DATE",closed="left", label="left"
).agg({"ALFA":"sum", "BETA": lambda g: g.iloc[0] - g.iloc[-1]})
ALFA BETA
DATE
2016-04-24 11 2
2016-05-01 4 -8
2016-05-08 18 5
我认为我的方法可以解决您的数据问题。定义
def get_series_first_minus_last(s):
try:
return s.iloc[0] - s.iloc[-1]
except IndexError:
return 0
并仅通过函数调用替换 lambda 调用,即
df.resample("W", on="DATE",closed="left", label="left"
).agg({"ALFA":"sum", "BETA": get_series_first_minus_last})
请注意,在新定义的函数中,如果您愿意,也可以返回 nan。
推荐阅读
- docker - docker 使用不同顺序的命令运行行为
- python - 如何从列表中随机选择同时排除先前的随机选择?
- powershell - 如何使用 .bat 脚本从非静态链接下载文件
- mysql - 局部变量上的MySQL海象运算符?
- c# - 将对象数组发布到 ASP.NET MVC 控制器得到 403 错误
- sql-server - 在存储过程中插入 SQL WHERE 子句作为参数,并仅使用非空子句及其参数值
- javascript - 在使用 JSON.parse 之前应该如何清理不受信任的 JSON?
- javascript - 我的 javascript 没有显示错误,但它没有做任何事情
- mysql - 当我尝试将 mysql 与 Node.js 连接时,我的 docker-compose 文件不起作用
- python - 使用moviepy包(Python)的问题