Python 如何基于列重新采样/重新索引/分组';谁的数据?
所以我得到了一个熊猫数据框,它以1秒的分辨率包含了2个用水值。值为“热输入”和“热输出”。hotIn可以以1秒的分辨率记录到十分之一加仑,而hotOut则记录代表一加仑的整数脉冲,即当脉冲发生时,一加仑已经通过仪表。脉冲大约每14-15秒出现一次 数据大致如下所示:Python 如何基于列重新采样/重新索引/分组';谁的数据?,python,pandas,Python,Pandas,所以我得到了一个熊猫数据框,它以1秒的分辨率包含了2个用水值。值为“热输入”和“热输出”。hotIn可以以1秒的分辨率记录到十分之一加仑,而hotOut则记录代表一加仑的整数脉冲,即当脉冲发生时,一加仑已经通过仪表。脉冲大约每14-15秒出现一次 数据大致如下所示: Index hotIn(gpm) hotOut(pulse=1gal) 2019-03-23T00:00:00 4 0 2019-
Index hotIn(gpm) hotOut(pulse=1gal)
2019-03-23T00:00:00 4 0
2019-03-23T00:00:01 5 0
2019-03-23T00:00:02 4 0
2019-03-23T00:00:03 4 0
2019-03-23T00:00:04 3 0
2019-03-23T00:00:05 4 1
2019-03-23T00:00:06 4 0
2019-03-23T00:00:07 5 0
2019-03-23T00:00:08 3 0
2019-03-23T00:00:09 3 0
2019-03-23T00:00:10 4 0
2019-03-23T00:00:11 4 0
2019-03-23T00:00:12 5 0
2019-03-23T00:00:13 5 1
Index hotIn sum(gpm) hotOut(pulse=1gal)
2019-03-23T00:00:05 24 1
2019-03-23T00:00:13 32 1
我想做的是根据脉冲的出现对数据帧进行重新采样或重新编制索引,并对新时间戳之间的hotIn求和 例如,在00:00:00-00:00:05和00:00:06-00:00:13之间求和hotIn 理想情况下,结果如下所示:
Index hotIn(gpm) hotOut(pulse=1gal)
2019-03-23T00:00:00 4 0
2019-03-23T00:00:01 5 0
2019-03-23T00:00:02 4 0
2019-03-23T00:00:03 4 0
2019-03-23T00:00:04 3 0
2019-03-23T00:00:05 4 1
2019-03-23T00:00:06 4 0
2019-03-23T00:00:07 5 0
2019-03-23T00:00:08 3 0
2019-03-23T00:00:09 3 0
2019-03-23T00:00:10 4 0
2019-03-23T00:00:11 4 0
2019-03-23T00:00:12 5 0
2019-03-23T00:00:13 5 1
Index hotIn sum(gpm) hotOut(pulse=1gal)
2019-03-23T00:00:05 24 1
2019-03-23T00:00:13 32 1
我已经探索了使用两步for-elif循环,只检查hotOut==1,但在大型数据集上速度非常慢。如果可能的话,熊猫的时间戳功能肯定会更出色。
我也不能简单地在设定的频率上重新采样,因为脉冲之间的间隔是周期性变化的。主要问题是脉冲变化之间的时间戳周期,因此一般的重采样规则不起作用。在提取与脉冲相关联的时间戳并将其作为新索引应用于main时,我也遇到了匹配数据帧长度的问题。您不想在索引上分组。只要
'hotOut(pulse=1gal)
发生变化,您就要分组
s = df['hotOut(pulse=1gal)'].cumsum().shift().bfill()
(df.reset_index()
.groupby(s, as_index=False)
.agg({'Index': 'last', 'hotIn(gpm)': 'sum', 'hotOut(pulse=1gal)': 'last'})
.set_index('Index'))
IIUC,你可以做:
s = df['hotOut(pulse=1gal)'].shift().ne(0).cumsum()
(df.groupby(s)
.agg({'Index':'last', 'hotIn(gpm)':'sum'})
.reset_index(drop=True)
)
输出:
Index hotIn(gpm)
0 2019-03-23T00:00:05 24
1 2019-03-23T00:00:13 33