python-3.x - 如何使用 Pandas 查找固定时间段之间的 AVG 和 STD
问题描述
我的数据集df
如下所示:
DateTimeVal Open
2017-01-01 17:00:00 5.1532
2017-01-01 17:01:00 5.3522
2017-01-01 17:02:00 5.4535
2017-01-01 17:03:00 5.3567
2017-01-01 17:04:00 5.1512
....
它是一个minute
diff
基于数据集。
在我的计算中,一天(24 hour
)定义为:
17:00:00
Sunday
to16:59:00
Monday
等其他日子
我想要做的是整天找到每个from to等的AVG
,和STD
24 hour
17:00:00
Sunday
16:59:00
Monday
我做了什么?
我这样做是rolling
为了找到,AVG
但它确实适用于 aday
而不是time-range
# day avg
# 7 day rolling avg
df = (
df.assign(DAY_AVG=df.rolling(window=1*24*60)['Open'].mean())
df.assign(7DAY_AVG=df.rolling(window=7*24*60)['Open'].mean())
.groupby(df['DateTimeVal'].dt.date)
.last() )
我需要这两件事的帮助:
- 如何找到
AVG
, 和STD
之间的固定时间段? - 如何找到
AVG
和STD
的固定时间段之间的7D rolling
和14 Days rolling
?
解决方案
resample
与 一起使用base
:
#Create empty dataframe for 2 days
df = pd.DataFrame(index = pd.date_range('2017-07-01', periods=48, freq='1H'))
#Set value equal to 1 from 17:00 to 16:59 next day
df.loc['2017-07-01 17:00:00': '2017-07-02 16:59:59', 'Value'] = 1
print(df)
输出:
Value
2017-07-01 00:00:00 NaN
2017-07-01 01:00:00 NaN
2017-07-01 02:00:00 NaN
2017-07-01 03:00:00 NaN
2017-07-01 04:00:00 NaN
2017-07-01 05:00:00 NaN
2017-07-01 06:00:00 NaN
2017-07-01 07:00:00 NaN
2017-07-01 08:00:00 NaN
2017-07-01 09:00:00 NaN
2017-07-01 10:00:00 NaN
2017-07-01 11:00:00 NaN
2017-07-01 12:00:00 NaN
2017-07-01 13:00:00 NaN
2017-07-01 14:00:00 NaN
2017-07-01 15:00:00 NaN
2017-07-01 16:00:00 NaN
2017-07-01 17:00:00 1.0
2017-07-01 18:00:00 1.0
2017-07-01 19:00:00 1.0
2017-07-01 20:00:00 1.0
2017-07-01 21:00:00 1.0
2017-07-01 22:00:00 1.0
2017-07-01 23:00:00 1.0
2017-07-02 00:00:00 1.0
2017-07-02 01:00:00 1.0
2017-07-02 02:00:00 1.0
2017-07-02 03:00:00 1.0
2017-07-02 04:00:00 1.0
2017-07-02 05:00:00 1.0
2017-07-02 06:00:00 1.0
2017-07-02 07:00:00 1.0
2017-07-02 08:00:00 1.0
2017-07-02 09:00:00 1.0
2017-07-02 10:00:00 1.0
2017-07-02 11:00:00 1.0
2017-07-02 12:00:00 1.0
2017-07-02 13:00:00 1.0
2017-07-02 14:00:00 1.0
2017-07-02 15:00:00 1.0
2017-07-02 16:00:00 1.0
2017-07-02 17:00:00 NaN
2017-07-02 18:00:00 NaN
2017-07-02 19:00:00 NaN
2017-07-02 20:00:00 NaN
2017-07-02 21:00:00 NaN
2017-07-02 22:00:00 NaN
2017-07-02 23:00:00 NaN
现在使用,resample
与base=17
df.resample('24H', base=17).sum()
输出:
Value
2017-06-30 17:00:00 0.0
2017-07-01 17:00:00 24.0
2017-07-02 17:00:00 0.0
更新分钟采样:
df = pd.DataFrame({'Value': 0}, index = pd.date_range('2018-10-01', '2018-10-03', freq='1T'))
df.loc['2018-10-01 15:00:00':'2018-10-02 18:59:50', 'Value'] = 1
df.resample('24H', base=17).agg(['sum','mean'])
输出:
Value
sum mean
2018-09-30 17:00:00 120 0.117647
2018-10-01 17:00:00 1440 1.000000
2018-10-02 17:00:00 120 0.285036
推荐阅读
- sql - Go 应用程序在 FLOATS 上使用 GROUP_CONCAT 进行 SQL 查询返回 []uint8 而不是实际的 []float64
- amazon-web-services - 如何使用 GoLang 拒绝注册触发器
- c - cmpq 0,R 和 testq R,R 有什么区别?
- sql - 将 VBA 函数转换为 VB.net 以获取 sql 数据
- python - 正则表达式的负面展望?急切地只匹配片段的第一个尖括号
- linux - 当我们使用 bash 对文件中的单词进行 grep 时,如何跳过注释部分( /* ....*/ ?
- c# - 如果外部进程或用户试图访问它,有没有办法卸载虚拟驱动器?
- php - 如果未找到该字段,则显示文本消息,如果找到则不显示
- c# - 创建新标签页时如何在代码中克隆标签页内的所有内容
- node.js - 连接到 MongoDB Atlas 时如何修复“错误:querySrv EREFUSED”?