Pandas - MultiIndex 重采样 - 我不想丢失其他索引的信息
我有一个这样的数据表:
value
A B
111 2024-03-22 00:00:00 1
111 2024-03-22 01:00:00 2
111 2024-03-22 02:00:00 3
222 2024-03-22 00:00:00 4
222 2024-03-22 01:00:00 5
222 2024-03-22 02:00:00 6
现在我想把索引B按天重新采样并求和,期望得到以下结果:
value
A B
111 2024-03-22 00:00:00 6
222 2024-03-22 00:00:00 15
我该怎么做才能实现这个呢?
另一个例子是这样的:
value
A B
111 2024-03-22 00:00:00 1
111 2024-03-22 01:00:00 2
111 2024-03-22 02:00:00 3
222 2024-03-22 00:00:00 4
222 2024-03-22 01:00:00 5
222 2024-03-22 02:00:00 6
333 2024-03-22 05:00:00 7
我想要通过每小时重新采样得到以下结果:
value
A B
111 2024-03-22 00:00:00 1
111 2024-03-22 01:00:00 2
111 2024-03-22 02:00:00 3
111 2024-03-22 03:00:00 0
111 2024-03-22 04:00:00 0
111 2024-03-22 05:00:00 0
222 2024-03-22 00:00:00 4
222 2024-03-22 01:00:00 5
222 2024-03-22 02:00:00 6
222 2024-03-22 03:00:00 0
222 2024-03-22 04:00:00 0
222 2024-03-22 05:00:00 0
333 2024-03-22 00:00:00 0
333 2024-03-22 01:00:00 0
333 2024-03-22 02:00:00 0
333 2024-03-22 03:00:00 0
333 2024-03-22 04:00:00 0
333 2024-03-22 05:00:00 7
Pandas版本:2.0.1
我尝试在重新采样时使用level,但这样会丢失索引A。
当我有两个时间戳在索引中,并想把一个按天重新采样,另一个按小时重新采样时,我也遇到了同样的问题。
我查看了这里其他相关问题的答案,但找不到适合我的解决办法。
我自己都搞糊涂了,可能是我没有看到正确的实现方法。 :)
如果你需要更多信息,请告诉我。
提前谢谢你。
问候,Oliver
1 个回答
3
在进行resample
操作之前,你需要先用groupby
把数据分组,这样才能保留A
这个索引。
import pandas as pd
df = pd.DataFrame.from_dict({'value':
{(111, pd.Timestamp('2024-03-22 00:00:00')): 1,
(111, pd.Timestamp('2024-03-22 01:00:00')): 2,
(111, pd.Timestamp('2024-03-22 02:00:00')): 3,
(222, pd.Timestamp('2024-03-22 00:00:00')): 4,
(222, pd.Timestamp('2024-03-22 01:00:00')): 5,
(222, pd.Timestamp('2024-03-22 02:00:00')): 6}}
)
df.groupby(level=0).resample('d', level=1).sum()
# returns:
value
A B
111 2024-03-22 6
222 2024-03-22 15