Python:滚动求和不会产生12个月的求和

2024-09-26 22:50:14 发布

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

我有一个dataframe,看起来像:

df

ID      RY    Month INCIDENT_NO
AB10    2019    7   3
AB10    2019    12  3
AB1286  2011    5   2
AB1286  2012    1   2
AB1286  2014    4   1

我正在尝试根据ID创建12个月的事件编号滚动总和。我正在编写如下代码:

df.groupby('ID').rolling(12,on='RY').INCIDENT_NO.sum()

它产生以下输出:

  ID         RY  
    AB10      2019     NaN
              2019     NaN
    AB1286    2011     NaN
              2012     NaN
              2014     NaN
                      ... 
    WS7       2020    30.0
    WS8       2016     NaN
    WS9       2014     NaN
              2018     NaN
              2019     NaN

然而,它并没有产生预期的结果。例如,在ID AB10中,它出现了两次,应该出现一次。有人能告诉我哪里出错了吗?此外,我想显示每年的滚动总和(即使数据不存在)。例如,ID ws9没有任何RY 2020的数据,它应该显示零和

任何帮助都将不胜感激


Tags: 数据no代码iddataframedf事件nan
3条回答

我想你需要{}和{}:

df.groupby(['ID','RY'], as_index=False)['INCIDENT_NO'].sum().fillna(0, downcast='infer')

如果数据中缺少年份和月份,则可以对数据执行reindex操作并创建pivot_table

df = df.groupby(["ID", "RY", "Month"])['INCIDENT_NO'].sum().reset_index()
idx = pd.MultiIndex.from_product([df['ID'].unique(),
                              range(df['RY'].min(), df['RY'].max()+1),
                              range(df['Month'].min(), df['Month'].max()+1)],
                             names=['ID', 'RY', 'Month'])
(df.set_index(["ID", "RY", "Month"]).reindex(idx).sort_index().fillna(0).reset_index()
 .pivot_table(index='ID', values='INCIDENT_NO', columns='RY', aggfunc='sum'))

Out[205]: 
RY      2011  2012  2013  2014  2015  2016  2017  2018  2019
ID                                                          
AB10     0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   6.0
AB1286   2.0   2.0   0.0   1.0   0.0   0.0   0.0   0.0   0.0

我认为您应该首先通过分组“ID”、“RY”和“month”(每行代表每个月),确保每个ID上每个月的数据按正确的升序排列,然后添加滚动(12)

df.groupby(['ID', 'RY', 'month']).rolling(12).sum()

相关问题 更多 >

    热门问题