我有一个数据集,每分钟从一台设备上读取一次读数(储罐液位(,我想创建一个新的数据集(数据帧(,其中包含每天的样本数和高于设定值的读数。
Noxious Tank Level.MIN Noxious Tank Level.MAX Date_Time
0 9.32 9.33 2019-12-31 05:01:00
1 9.32 9.34 2019-12-31 05:02:00
2 9.32 9.35 2019-12-31 05:03:00
3 9.31 9.35 2019-12-31 05:04:00
4 9.31 9.35 2019-12-31 05:05:00
... ... ... ...
528175 2.98 3.01 2020-12-31 23:56:00
528176 2.98 3.02 2020-12-31 23:57:00
528177 2.98 3.01 2020-12-31 23:58:00
528178 2.98 3.02 2020-12-31 23:59:00
528179 2.98 2.99 2021-01-01 00:00:00
使用lamdba函数,我可以查看每个值是否为溢出(储罐液位>设置点(-我还通过Date_Time:对数据帧进行了索引
df['Overflow'] = df.apply(lambda x: True if x['Noxious Tank Level.MIN'] > 89 else False , axis=1)
Noxious Tank Level.MIN Noxious Tank Level.MAX Overflow
Date_Time
2019-12-31 05:01:00 9.32 9.33 False
2019-12-31 05:02:00 9.32 9.34 False
2019-12-31 05:03:00 9.32 9.35 False
2019-12-31 05:04:00 9.31 9.35 False
2019-12-31 05:05:00 9.31 9.35 False
... ... ... ...
2020-12-31 23:56:00 2.98 3.01 False
2020-12-31 23:57:00 2.98 3.02 False
2020-12-31 23:58:00 2.98 3.01 False
2020-12-31 23:59:00 2.98 3.02 False
2021-01-01 00:00:00 2.98 2.99 False
现在,我想计算每天的样本数量和Overflow
列中"True"值的数量,以计算溢出中每天的分数
我觉得resample
或groupby
将是最好的选择,但我不知道如何使用这些计数创建新的数据集,并包括Overflow
列中的条件计数
首次使用:
df['Overflow'] = df['Noxious Tank Level.MIN'] > 89
然后对于计数True
s使用sum
,对于计数值使用size
每天/日期:
df1 = df.resample('d')['Overflow'].agg(['sum','size'])
或者:
df1 = df.groupby(pd.Grouper(freq='D'))['Overflow'].agg(['sum','size'])
或者:
df2 = df.groupby(df.index.date)['Overflow'].agg(['sum','size'])