Python 如何计算使用熊猫前n天的平均值?

Python 如何计算使用熊猫前n天的平均值?,python,pandas,Python,Pandas,我想像前10天一样计算每天的平均值 例如,在结果表的A列中,“1/11/2000”显示44,这是从“1/1/2000”到“1/10/2000”的A值的平均值 原始数据: A B C 1/1/2000 60 62 88 1/2/2000 46 99 28 1/3/2000 20 23 94 1/4/2000 28 19 79 1/

我想像前10天一样计算每天的平均值

例如,在结果表的A列中,“1/11/2000”显示44,这是从“1/1/2000”到“1/10/2000”的A值的平均值

原始数据:

              A      B       C
1/1/2000     60      62      88 
1/2/2000     46      99      28 
1/3/2000     20      23      94 
1/4/2000     28      19      79 
1/5/2000     58      45      12 
1/6/2000     50      46      62 
1/7/2000     68      4       55 
1/8/2000     54      64      79 
1/9/2000     26      41      63 
1/10/2000    33      10      18 
1/11/2000    37      82      73 
1/12/2000    67      33      29 
1/13/2000    2       82      17 
1/14/2000    82      74      51 
1/15/2000    9       46      81 
1/16/2000    72      84      70 
1/17/2000    74      77      100 
1/18/2000    19      88      37 
结果:

               A      B      C
1/1/2000            
1/2/2000            
1/3/2000            
1/4/2000            
1/5/2000            
1/6/2000            
1/7/2000            
1/8/2000            
1/9/2000            
1/10/2000           
1/11/2000    44      41      58 
1/12/2000    42      43      56 
1/13/2000    44      37      56 
1/14/2000    42      43      49 
1/15/2000    48      48      46 
1/16/2000    43      48      53 
1/17/2000    45      52      54 
1/18/2000    46      59      58 

您可以将
rolling.mean()
shift
一起使用:

df.rolling(window = 10).mean().applymap(round).shift()

警告/警告
numpy
通常(并非总是)提供更高性能的解决方案。然而,它们也缺乏直观性和灵活性。我提供这个解决方案是为了向社区提供有用的信息。我不会向刚刚熟悉
pandas
numpy
的人推荐这个。我建议你也阅读下面@Jeff的评论

numpy
使用
步履蹒跚

时间测试

如果缺少值,则此操作将失败:numpy对以下内容不友好this@Jeff使用
np.nanmean
并适应nan值是一个简单的修复方法。请重新考虑你的否决票,或作进一步评论。谢谢。推荐人们使用大步行走,这太疯狂了。当然,也有一些高级用户偶尔可以做一些新奇的事情,但99%的人不应该碰像这样的小傻瓜。而且它相当不灵活。试着在一段时间内跳过两个南。@Jeff,我尊重你的意见。因此,我试图从你和其他人身上汲取任何智慧。你认为最好不要提供这样的答案吗。或者留下这样一个带有适当警告的答案。到目前为止,我认为这是有用的信息。如果你建议我这样做的话,我会更负责任,发出更响亮的警告。但根据你的评论,我认为你根本不希望看到这样的答案。你会建议我做什么对社区最合适。是的,这是一个有用的答案,但警告是大多数用户不会(也不应该这样做);他偶尔也会说一些numpy惯例更具表现力,但它们几乎总是不那么灵活,在语法上也不太具有挑战性。因此,有了这些警告,一切都很好。
import pandas as pd
import numpy as np
from numpy.lib.stride_tricks import as_strided as stride

v = df.values
n, m = v.shape
s1, s2 = v.strides

# note that `np.nanmean` is used to address potential nan values
pd.DataFrame(
    np.nanmean(stride(v, (n - 9, 10, m), (s1, s1, s2)), 1).round(),
    df.index[9:], df.columns
)

              A     B     C
1/10/2000  44.0  41.0  58.0
1/11/2000  42.0  43.0  56.0
1/12/2000  44.0  37.0  56.0
1/13/2000  42.0  43.0  49.0
1/14/2000  48.0  48.0  46.0
1/15/2000  43.0  48.0  53.0
1/16/2000  45.0  52.0  54.0
1/17/2000  46.0  59.0  58.0
1/18/2000  42.0  62.0  54.0