我有以下代码
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
排序的每个组中进行滚动总和。我该如何实现?
答案 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