我有一个数据集,每分钟有一个设备的读数(坦克级别),我想创建一个新的数据集(数据框),其中包含每天的样本数和高于设定值的读数数.
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 函数,我可以查看每个值是否为溢出(Tank Level > setpoint)——我还通过 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
列中“真”值的数量,以计算溢出中每天的比例
我觉得 resample
或 groupby
将是可行的方法,但我不知道如何仅使用这些计数创建新数据集并包含 条件< /em> 来自 Overflow
列的计数
答案 0 :(得分:2)
第一次使用:
df['Overflow'] = df['Noxious Tank Level.MIN'] > 89
然后对于计数 True
使用 sum
nad 对于计数值使用 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'])