用Pandas计算12月1月2日的平均值

2024-09-27 21:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Pandas来计算三个月内三个值的平均值,这个数据集在三个不同的列中列出了年份、月份和感兴趣的值。通常,我会用熊猫.loc和isin()和panads.groupby公司函数来实现这一点,但我要分析的季节之一是12月1月2月,它将跨越两个独立的年份(即2000年12月、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)


Tags: 数据函数pandas公司事情loc感兴趣平均值
3条回答

添加一个新列,该列根据现有数据生成一个“月标识”,其值为(year-2000)*12+(month-2)。然后按这个新值分组。在

您可以定义自定义季度并使用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

我想你要找的是rolling_mean。在

例如

ts
Out[39]:
2000-01-31   -1.782781
2000-02-29    0.976542
2000-03-31   -1.932712
2000-04-30    0.098827
2000-05-31   -0.236521
2000-06-30   -0.869157
2000-07-31    0.653783
2000-08-31    0.341896
2000-09-30   -0.685596
2000-10-31   -1.126368
2000-11-30    0.850350
2000-12-31   -1.583704
2001-01-31    1.677160
2001-02-28    1.872733
Freq: M, dtype: float64

提供3个窗口

^{pr2}$

这也计算重叠范围,您可以忽略它。在

相关问题 更多 >

    热门问题