滚动总和日期索引

时间:2018-11-14 15:05:40

标签: python pandas

我有以下代码

data = {'date': ['2014-05-05', '2014-05-01', '2014-05-02',
                 '2014-05-02', '2014-05-02', '2014-05-02',
                 '2014-05-03', '2014-05-03', '2014-05-04',
                 '2014-05-04'],
        'battle_deaths': [34, 25, 26, 15, 15, 14, 26, 25, 62, 41],
        'group': [1, 2, 3, 2, 2, 3, 2, 1, 3, 1]}
df = pd.DataFrame(data, columns=['date', 'battle_deaths', 'group' ''])

df = df.set_index('date')
df.groupby('group').rolling(2).sum()

哪个输出

                 battle_deaths  group
group date                            
1     2014-05-05            NaN    NaN
      2014-05-03           59.0    2.0
      2014-05-04           66.0    2.0
2     2014-05-01            NaN    NaN
      2014-05-02           40.0    4.0
      2014-05-02           30.0    4.0
      2014-05-03           41.0    4.0
3     2014-05-02            NaN    NaN
      2014-05-02           40.0    6.0
      2014-05-04           76.0    6.0

但是由于索引是日期,所以我希望第一组battle_deaths列的日期NaN的值为2014-05-03。换句话说,我想在按date排序的每个组中进行滚动总和。我该如何实现?

2 个答案:

答案 0 :(得分:3)

该数据帧需要排序,这是我的处理方式。

df.sort_index().groupby('group').rolling(2).sum()

答案 1 :(得分:1)

我认为需要将日期转换为日期时间并按sort_values进行排序:

df['date'] = pd.to_datetime(df['date'])
df = df.sort_values('date').set_index('date')
df = df.groupby('group').rolling(2).sum()

                  battle_deaths  group
group date                            
1     2014-05-03            NaN    NaN
      2014-05-04           66.0    2.0
      2014-05-05           75.0    2.0
2     2014-05-01            NaN    NaN
      2014-05-02           40.0    4.0
      2014-05-02           30.0    4.0
      2014-05-03           41.0    4.0
3     2014-05-02            NaN    NaN
      2014-05-02           40.0    6.0
      2014-05-04           76.0    6.0