Python 在具有重复索引的数据帧上应用滚动平均函数

Python 在具有重复索引的数据帧上应用滚动平均函数,python,numpy,pandas,dataframe,average-precision,Python,Numpy,Pandas,Dataframe,Average Precision,我难以在包含重复索引的以下数据帧上使用pd.U均值函数: amount 20140101 3 20140102 4 20140103 3 20140103 5 20140103 1 20140104 5 20140105 6 20140106 2 … 我需要计算“金额”的3天平均值,例如,从20140101到20140103的平均值应该是(3+4

我难以在包含重复索引的以下数据帧上使用pd.U均值函数:

               amount
    20140101    3
    20140102    4
    20140103    3
    20140103    5
    20140103    1
    20140104    5
    20140105    6
    20140106    2
    …
我需要计算“金额”的3天平均值,例如,从
20140101到
20140103的平均值应该是
(3+4+3+5+1)/5=3.2
,从20140104到20140106的平均值应该是
(5+6+2)/3=4.3

有人知道怎么做吗?提前谢谢你

您可以执行以下操作:

>>> df
          amount
20140101       3
20140102       4
20140103       3
20140103       5
20140103       1
20140104       5
20140105       6
20140106       2
>>> xf = df.groupby(level=0)['amount'].agg(['sum', 'count'])
>>> xf
          sum  count
20140101    3      1
20140102    4      1
20140103    9      3
20140104    5      1
20140105    6      1
20140106    2      1
>>> pd.rolling_sum(xf['sum'], 3, 0) / pd.rolling_sum(xf['count'], 3, 0)
20140101    3.000
20140102    3.500
20140103    3.200
20140104    3.600
20140105    4.000
20140106    4.333
dtype: float64

对于
20140103
20140106
,您将分别获得
3.2
4.3

如果您的日期列已经是日期时间,并且是您可以调用的索引
滚动平均值

In [15]:

pd.rolling_mean(df['amount'], window=1,  freq='3d')
Out[15]:
date
2014-01-01    3.200000
2014-01-04    4.333333
Freq: 3D, dtype: float64
如果需要,您可以通过执行以下操作将索引转换为日期时间:

df.index=pd.to_datetime(df.index.astype(str),“%Y%m%d”)


在这种情况下,索引实际上是dtype int64,如果它已经是一个字符串,那么您可以忽略
astype
bit

直到现在才意识到'freq'的用法,谢谢!它不会在空间不规则的数据帧上工作,这是我实际数据帧的情况。