在多索引数据帧上进行分组/滚动操作后,如何保留日期索引?
How can I retain the Date index after a groupby / rolling operation on a Multiindexed Dataframe?
正在创建以下示例 DataFrame:
import pandas as pd
df = pd.DataFrame(data=[[1, 1, 10, 20], [1, 2, 30, 40], [1, 3, 50, 60],
[2, 1, 11, 21], [2, 2, 31, 41], [2, 3, 51, 61]],
columns=['id', 'date', 'd1', 'd2'])
df.set_index(['id', 'date'], inplace=True)
DataFrame 如下所示:
>>> df
d1 d2
id date
1 1 10 20
2 30 40
3 50 60
2 1 11 21
2 31 41
3 51 61
现在,我想在 d1 列上的移动 window 上应用一个函数(示例中的求和),我关心的是最后将 id 和日期作为索引。
我会这样做:
df = df.groupby(level='id').rolling(window=2)['d1'].sum()
我获得的输出具有以下格式(在 Pandas 1.1.5 中):
>>> df
id
1 NaN
1 40.0
1 80.0
2 NaN
2 42.0
2 82.0
Name: d1, dtype: float64
我在网上看到了其他的例子,输出的其实是我想要的:
>>> df
id date
1 1 NaN
1 2 40.0
1 3 80.0
2 1 NaN
2 2 42.0
2 3 82.0
Name: d1, dtype: float64
如何获得此输出?我做错了什么?
只需将直接创建更改为分配
out = df.set_index(['id', 'date'])['d1']
out[:] = df.groupby('id').rolling(window=2)['d1'].sum().values
out
Out[180]:
id date
1 1 NaN
2 40.0
3 80.0
2 1 NaN
2 42.0
3 82.0
Name: d1, dtype: float64
正在创建以下示例 DataFrame:
import pandas as pd
df = pd.DataFrame(data=[[1, 1, 10, 20], [1, 2, 30, 40], [1, 3, 50, 60],
[2, 1, 11, 21], [2, 2, 31, 41], [2, 3, 51, 61]],
columns=['id', 'date', 'd1', 'd2'])
df.set_index(['id', 'date'], inplace=True)
DataFrame 如下所示:
>>> df
d1 d2
id date
1 1 10 20
2 30 40
3 50 60
2 1 11 21
2 31 41
3 51 61
现在,我想在 d1 列上的移动 window 上应用一个函数(示例中的求和),我关心的是最后将 id 和日期作为索引。
我会这样做:
df = df.groupby(level='id').rolling(window=2)['d1'].sum()
我获得的输出具有以下格式(在 Pandas 1.1.5 中):
>>> df
id
1 NaN
1 40.0
1 80.0
2 NaN
2 42.0
2 82.0
Name: d1, dtype: float64
我在网上看到了其他的例子,输出的其实是我想要的:
>>> df
id date
1 1 NaN
1 2 40.0
1 3 80.0
2 1 NaN
2 2 42.0
2 3 82.0
Name: d1, dtype: float64
如何获得此输出?我做错了什么?
只需将直接创建更改为分配
out = df.set_index(['id', 'date'])['d1']
out[:] = df.groupby('id').rolling(window=2)['d1'].sum().values
out
Out[180]:
id date
1 1 NaN
2 40.0
3 80.0
2 1 NaN
2 42.0
3 82.0
Name: d1, dtype: float64