如何在一天内的特定时间段内应用累积python函数,然后从第二天开始重置

Posted

技术标签:

【中文标题】如何在一天内的特定时间段内应用累积python函数,然后从第二天开始重置【英文标题】:How to apply a cumulative python function for specific time-periods within a day and then reset from the very next day 【发布时间】:2019-08-16 01:07:56 【问题描述】:

我正在对特定数量的时间段应用时间序列累积函数,比如 15 分钟到一系列天 我的主要功能是:

def axmp(df):
    return np.cumsum(df.Volume * (df.High + df.Low + df.Close)/3) / np.cumsum(df.Volume)

但我无法通过 pandas groupby 方法将上述函数应用于包含 15 分钟股票数据的 pandas 数据框。

在上面的函数中,我希望在每个新的一天开始时重置上面的 python 函数(即它不应该从前几天获取任何累积数字)并且应该持续超过一年的库存数据.

样本数据:

        Date    Open    High    Low Close   Volume
13-02-2019 9:15 65.89   65.89   65.89   65.89   24339
13-02-2019 9:30 66.00   66.00   66.00   66.00   1892
14-02-2019 11:15 65.98  65.98   65.98   65.98   1937
14-02-2019 11:30 65.95  66.01   65.95   66.01   5181
15-02-2019 9:15 66.04   66.08   66.04   66.08   6189

请建议我对上述代码或新代码进行任何修改。

【问题讨论】:

【参考方案1】:

IIUC 你需要申请axmp 按天分组:

df.Date = pd.to_datetime(df.Date)
df['new_col'] = df.groupby(df.Date.dt.day).apply(axmp).reset_index(drop=True)

输出

          Date         Open   High    Low   Close  Volume    new_col
0 2019-02-13 09:15:00  65.89  65.89  65.89  65.89   24339  65.890000
1 2019-02-13 09:30:00  66.00  66.00  66.00  66.00    1892  65.897934
2 2019-02-14 11:15:00  65.98  65.98  65.98  65.98    1937  65.980000
3 2019-02-14 11:30:00  65.95  66.01  65.95  66.01    5181  65.987279
4 2019-02-15 09:15:00  66.04  66.08  66.04  66.08    6189  66.066667

【讨论】:

@yatu 应用您的代码,新列仅显示数据框中的 NaN 值 @Wen-Ben 这不完全是一个滚动问题 对我来说很好@ScrappyCoco。日期是日期时间格式吗?否则使用新行

以上是关于如何在一天内的特定时间段内应用累积python函数,然后从第二天开始重置的主要内容,如果未能解决你的问题,请参考以下文章

如何在一年多的时间内找到一天内订单超过 1 个的客户

如何仅在一天中的特定时间运行 Python 脚本?

LNMP 负载均衡

选择一天中指定时间段内的数据 SQL Query

如何在一天内为你的实验室做一个网站

Firebase函数在一天中的特定时间重置值[重复]