簡體   English   中英

pandas 中的分組、移位和滾動平均值

[英]Groupby, shif and rolling mean in pandas

我正在嘗試在 pandas 中進行分組、移位和滾動平均。 我一直在尋找解決方案,但沒有運氣。 我有一個解決方法,但這不是最好的。 特別是因為我將來需要做滾動標准偏差。 誰能幫助我並提出更好的方法來做到這一點?

輸入數據:

df = pd.DataFrame({'month': [201912, 202001, 202001, 202002, 202002, 202003, 202003, 202004],
               'target': [0, 1, 0, 1, 1, 0, 0, 1]
              },
              index = [14, 15, 16, 17, 18, 19, 20, 21])

預期 output 為 2 個月的滾動平均值和 1 個月的移動:

df = pd.DataFrame({'month': [201912, 202001, 202002, 202003, 202004],
               'roll_2m': [np.nan, np.nan, 0.33, 0.75, 0.5]
              },
              index = [1, 2, 3, 4, 5])

解決這個問題的一個不好的解決方法是:

rolling_count = df.shift(1).target['count'].rolling(2).sum()
rolling_sum = df.shift(1).target['sum'].rolling(2).sum()
rolling_mean = rolling_sum/rolling_count                           
df['roll_2m'] = rolling_mean

我會先做一個groupby().agg()

(df.groupby('month').target.agg(['sum','count'])
   .rolling(2)
   .sum().shift()
   .assign(roll_2m=lambda x: x['sum']/x['count'])
)

Output:

        sum  count   roll_2m
month                       
201912  NaN    NaN       NaN
202001  NaN    NaN       NaN
202002  1.0    3.0  0.333333
202003  3.0    4.0  0.750000
202004  2.0    4.0  0.500000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM