如何合并跨越 2 年的冬季月份?

How to combine winter months that span 2 years?

我有一个数据框 p90results,其中包含从 1952 年 1 月 12 日到 2021 年 12 月 31 日的每日温度超标计数。

我想创建一个图表来总结每年冬季的每日超标情况。问题是冬季月份、12 月、1 月和 2 月分布在 2 年内。所以我会认为 1951 年的冬天是 1951 年 12 月、1952 年 1 月和 1952 年 2 月。

我的第一个想法是制作一个 if 语句,将 12 月份的年份加一。这样我就可以按年分组并拥有正确的冬季月份。这是我试过的:

for index, row in p90results.iterrows():
    if p90results.index.month==12:
        p90results.index.year=p90results.index.year+1

但是,当我这样做时,出现以下错误:ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

有没有办法更改 12 月的年份,以便我以后更容易绘图?

这就是我要做的。这不是最漂亮的,但它有效:

index = pd.date_range('2000-01-01', '2020-01-01', freq='1M')
df = pd.DataFrame({'high': np.random.randint(0,2, size=index.size), 'date':index})

date_offset = (df.date.dt.month*100 + df.date.dt.day - 320)%1300

df['winter'] = date_offset > 900
df['winter_yr'] = np.where((month < 6) & (df.winter), df.date.dt.year - 1, df.date.dt.year)

数字技巧归功于

您可以先将 'winter' 标签应用于相关月份。之后您可以应用其他逻辑来确定分组。

df = pd.DataFrame({'Date': pd.date_range(start='1951-09-01 00:00:00', periods=180)})
df['season'] = np.where(df['Date'].dt.month.isin([12,1,2]), 'winter', np.nan)