【问题标题】:Pandas Series groupby specific hours熊猫系列按特定时间分组
【发布时间】:2021-05-07 11:44:34
【问题描述】:

我正在寻找在gas day(与天然气交易有关)分组熊猫系列的有效实施。 这包括 CET 时区早上 6 点到第二天早上 6 点之间的所有时间/时间戳。 由于夏令时,一年一次的汽油日有 23 小时和一次 25 小时。 我目前的解决方案工作正常(见下文,to_gas_day 函数),但速度非常慢。任何想法表示赞赏。

import pandas as pd

def to_gas_day(stamp):
    """Take a time stamp and return date according to gas day (from 6 to 6 CET)."""
    if stamp.hour < 6:
        day = stamp.date() - pd.Timedelta(days=1)
    else:
        day = stamp.date()
    return pd.to_datetime(day)

se = pd.Series(
    data = 1.,
    index=pd.date_range('2020-10-23','2020-10-27', freq='H', tz='CET')[:-1]
    )

# This is expected count of hours around DST date
se.groupby(to_gas_day).count()

Out[107]: 
2020-10-22     6
2020-10-23    24
2020-10-24    25
2020-10-25    24
2020-10-26    18
dtype: int64

【问题讨论】:

    标签: pandas time-series pandas-groupby


    【解决方案1】:

    这是否等同于您的代码?

    obj = pd.Series(pd.date_range('2020-10-23','2020-10-27', freq='H', tz='CET')[:-1])
    
    cond = obj.dt.hour < 6
    obj2 = np.where(cond, 
                      obj.dt.date - pd.Timedelta(days=1),
                      obj.dt.date)
    obj2 = pd.Series(obj2)
    
    obj3 = obj2.value_counts().sort_index()
    print(obj3)
    
        2020-10-22     6
        2020-10-23    24
        2020-10-24    25
        2020-10-25    24
        2020-10-26    18
        dtype: int64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2016-06-24
      • 1970-01-01
      • 2019-11-17
      • 2019-01-02
      • 2016-12-06
      • 2019-06-22
      相关资源
      最近更新 更多