python - pandas - 自加入日期比较
问题描述
给定一个 Pandas 数据框df
date numeric_field
0 2019-06-06 n
1 2019-06-07 n
2 2019-06-08 n
我想在日期上进行自加入并将函数应用于numerical_field
.
在 SQL 中,我会做类似的事情:
SELECT a.date,
FUN(b.numeric_field))) new_field
FROM df a
INNER JOIN df b
ON b.date < a.date
WHERE a.date > '2019-06-06'
AND a.date <= '2019-06-08'
AND b.date >= '2019-06-06'
GROUP BY a.date
结果应该是:
date new_field
0 2019-06-07 fun(n)
1 2019-06-08 fun(n)
解决方案
我能想到的最快方法是交叉合并和查询:
df = df.assign(dummy=1)
(df.merge(df, on='dummy', suffixes=['','_r'])
.query('"2019-06-06"<=date_r<date<="2019-06-08"') # filter
.assign(new_field=lambda x: x['numeric_field'].sum()) # replace the function in `lambda`
[['date','new_field']]
)
输出:
date new_field
3 2019-06-07 nnn
6 2019-06-08 nnn
7 2019-06-08 nnn
推荐阅读
- c - 如何找到附近的价值?
- android - 如何在本机模块中声明 build.gradle 和 app/build.gradle 的属性以进行反应
- javascript - React.js 错误,未捕获(承诺中)错误:元素可能未呈现到 DOM
- javascript - For 循环仅适用于第一个元素
- python - 如何在python中使输出百分比
- microsoft-graph-api - 使用 microsoft graph 获取日历信息,无需创建应用注册
- java - 无法使用 uri http://www.springframework.org/tags/form 解析 taglib
- git - Jenkins 无法更新 GitHub 分支状态检查
- docker - NodePort 错误连接被拒绝(Docker 桌面、Windows、Kubernetes)
- html - 来自java spring的美化引导模板