如何解决固定时间段内的熊猫分组
我有一个客户清单,日期和分数:
import pandas as pd
import datetime as dt
import numpy as np
data = pd.DataFrame(
np.array(
[
["A",dt.datetime(2017,12,10),10.0],["A",dt.datetime(2018,1,15),11.0],16),12.0],13.0],["B",3,1),]
),columns=["Customer","Date","Score","Result"],)
Customer Date Score
0 A 2017-12-10 00:00:00 10
1 A 2018-01-10 00:00:00 10
2 A 2018-01-15 00:00:00 11
3 A 2018-01-16 00:00:00 12
4 A 2018-01-16 00:00:00 13
5 B 2018-01-16 00:00:00 10
6 A 2018-03-01 00:00:00 10
我想为每个客户计算最近14天(包括今天)的平均得分。结果应如下所示:
Customer Date Score Result
0 A 2017-12-10 00:00:00 10 10
1 A 2018-01-10 00:00:00 10 10
2 A 2018-01-15 00:00:00 11 10.5
3 A 2018-01-16 00:00:00 12 11.5
4 A 2018-01-16 00:00:00 13 11.5
5 B 2018-01-16 00:00:00 10 10
6 A 2018-03-01 00:00:00 10 10
谢谢!
解决方法
在Customer
上使用DataFrame.groupby
并在rolling
上计算窗口大小为14 days
的{{1}}均值,然后使用DataFrame.merge
合并使用数据框Score
滚动avg
:
data
结果:
avg = data.set_index('Date').groupby('Customer').rolling('14d')['Score'].mean()
avg = avg[~avg.index.duplicated(keep='last')]
df = data.merge(avg.rename('Result'),left_on=['Customer','Date'],right_index=True)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。