【问题标题】:Pandas Resampling biweekly between a specific week rangePandas 在特定周范围内每两周重新采样一次
【发布时间】:2022-01-04 20:46:18
【问题描述】:

我有一个包含每日值的 8 年时间序列,我想每两周重新采样一次。但是,我只需要每年第 18 周到第 30 周的双周值(即 W18、W20、W22、...、W30)。这种方法有时会给我“奇数”双周值(即 W19、W21、W23、...、W29)。我如何确保始终获得“偶数”双周值?

df = df.resample("2W").mean() 
df["Week"] = df.index.map(lambda dt: dt.week)
df = df.loc[df.Week.isin(range(18,31))] 

2010-01-01 至 2018-12-31 的每日数据示例:(短版)

Date       value_1   value_2
...              ...       ...
2010-05-03        10         1
2010-05-04        79        66
2010-05-05        40        16
2010-05-06        13        76
2010-05-07         2        36
2010-05-08        31        98
2010-05-09        96         3
2010-05-10        66        18
2010-05-11        99         9
...              ...       ...

第 18 周和第 30 周之间的预期双周数据:

Date       value_1   value_2   Week
2010-05-03        14         1     18
2010-05-17        33        89     20
2010-05-31        21        31     22
2010-06-14        33        56     24
2010-06-28        12        43     26
2010-07-12        21        72     28
2010-07-26        76        13     30
2011-05-02        60        28     18
2011-05-16        82         2     20
2011-05-30        30        15     22
...              ...       ...    ...

【问题讨论】:

    标签: python pandas time-series pandas-resample


    【解决方案1】:

    我认为最好的方法是使用列表理解分别创建范围。下面的代码将给出 18 到 30 之间的范围,只有偶数:

    weeks_to_include = [i for i in range(18, 31) if i % 2 == 0]
    

    使用此范围,您可以像上面一样进行过滤。我测试了下面的代码,它对我有用:

    #create a dummy dataframe
    dr = pd.date_range(start='2013-01-01', end='2021-12-31', freq='D')
    df = pd.DataFrame(index=dr)
    df['col1'] = range(0, len(df))
    
    #create a list of even weeks in a range
    weeks_to_include = [i for i in range(18, 31) if i % 2 == 0]
    
    #create a column with the week of the year
    df['weekofyear'] = df.index.isocalendar().week
    
    #filter for only weeks_to_include
    df = df.loc[df['weekofyear'].isin(weeks_to_include)]
    

    【讨论】:

    • 这个过滤器只需要偶数周。但是,我正在重新采样以采用双周平均值。我的预期逻辑是每两周重新采样一次平均值,然后获取我需要的几周。
    • 是的,所以只过滤所需的几周,然后重新采样应该可以满足您的需求?
    • 经过几次挖掘,我认为每两周重新采样是主要问题,因为它从 W1 开始(这是一个奇数周),然后在 53 周的闰年交替出现。我正在尝试一种不同的方法,每周重新采样,然后平均两周,但到目前为止没有成功。
    猜你喜欢
    • 2015-09-08
    • 2021-03-11
    • 2020-11-12
    • 2012-11-13
    • 1970-01-01
    • 2019-09-30
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多