python - 使用 Pandas 计算 12 月 - 1 月 - 2 月平均值

标签 python pandas time-series

我想使用 Pandas 计算数据集中三个不同月份的三个值的平均值,该数据集中列出了三个不同列中的年份、月份和感兴趣的值。通常,我只会使用 pandas.loc 和 isin() 以及 panads.groupby 函数来执行此操作,但我想要分析的季节之一是 12 月 - 1 月 - 2 月,它将跨越两个不同年份的数据(即 12 月)。 2000 年、2001 年 1 月、2001 年 2 月)。想知道是否有人对如何处理此类事情有任何建议。

2000  1  5
2000  2  6
2000  3  8
2000  4  10
2000  5  9
2000  6  11
2000  7  13
2000  8  6
2000  9  8
2000  10 7
2000  11 7
2000  12 4
2001  1  3
2001  2  5

(即在这种情况下,2000 年 1 月和 2 月将被忽略,平均值为 MAM:9、JJA:10、SON:7.33、DJF:4)

最佳答案

您可以定义自定义季度并使用groupby

# Test data
df = pd.DataFrame({'month': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2],
                   'year': [2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2001, 2001],
                   'value': [5.0, 6.0, 8.0, 10.0, 9.0, 11.0, 13.0, 6.0, 8.0, 7, 7, 4, 3.0, 5.0]})

# Custom quarters definition
quarters = {1: 'DJF', 2: 'DJF', 3: 'MAM', 4: 'MAM', 5: 'MAM', 6: 'JJA', 7: 'JJA', 8: 'JJA', 9: 'SON', 10: 'SON', 11: 'SON', 
    12: 'DJF'}

df = df.set_index(['month'])

# can be grouped by year and quarters
df.groupby(['year',quarters])['value'].mean()

year     
2000  DJF     5.000000
      JJA    10.000000
      MAM     9.000000
      SON     7.333333
2001  DJF     4.000000

# or only by quarters according to the needs
df.groupby(quarters)['value'].mean()

DJF     4.600000
JJA    10.000000
MAM     9.000000
SON     7.333333

关于python - 使用 Pandas 计算 12 月 - 1 月 - 2 月平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32571417/

相关文章:

python - 优化Python在三迭代语句中的计数

python - 如何修复 ValueError : multiclass format is not supported

python - 尝试从 Pandas 数据框中以字符串开头的所有列中选择数据

r - 将 xts 对象的秒设置为 0

python - 如何从 Prophet 中提取季节性趋势

python - 如何使用 OpenCV 从图像中检测和提取签名?

python - 在企业防火墙后面验证谷歌云

python - 用条件标准化 Pandas 系列

python pandas 奇怪的多行索引,但不是一行

r - 如何通过 ggplot2-autoplot 放大时间序列数据