我有一个数据框 df ,如下所示。日期和时间是2个多级索引
observation1 observation2
date Time
2012-11-02 9:15:00 79.373668 224
9:16:00 130.841316 477
2012-11-03 9:15:00 45.312814 835
9:16:00 123.776946 623
9:17:00 153.76646 624
9:18:00 463.276946 626
9:19:00 663.176934 622
9:20:00 763.77333 621
2012-11-04 9:15:00 115.449437 122
9:16:00 123.776946 555
9:17:00 153.76646 344
9:18:00 463.276946 212
我想对日常数据块运行一些复杂的过程。
伪代码看起来像
for count in df(level 0 index) :
new_df = get only chunk for count
complex_process(new_df)
所以,首先,我找不到只访问日期块的方法
2012-11-03 9:15:00 45.312814 835
9:16:00 123.776946 623
9:17:00 153.76646 624
9:18:00 463.276946 626
9:19:00 663.176934 622
9:20:00 763.77333 621
然后将其发送进行处理。我在 for 循环中执行此操作,因为我不确定是否有任何方法可以在不提及 0 级列的确切值的情况下执行此操作。我做了一些基本搜索并发现df.index.get_level_values(0)
,但它返回所有值,这会导致循环在给定的一天运行多次。我想每天创建一个数据框并将其发送以进行处理。
一种简单的方法是对索引的第一级进行分组 - 迭代 groupby 对象将返回组键和包含每个组的子帧。
In [136]: for date, new_df in df.groupby(level=0):
...: print(new_df)
...:
observation1 observation2
date Time
2012-11-02 9:15:00 79.373668 224
9:16:00 130.841316 477
observation1 observation2
date Time
2012-11-03 9:15:00 45.312814 835
9:16:00 123.776946 623
9:17:00 153.766460 624
9:18:00 463.276946 626
9:19:00 663.176934 622
9:20:00 763.773330 621
observation1 observation2
date Time
2012-11-04 9:15:00 115.449437 122
9:16:00 123.776946 555
9:17:00 153.766460 344
9:18:00 463.276946 212
您还可以使用droplevel
删除第一个索引(无用的date
index):
In [136]: for date, new_df in df.groupby(level=0):
...: print(new_df.droplevel(0))
...:
observation1 observation2
Time
9:15:00 79.373668 224
9:16:00 130.841316 477
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)