pandas 数据框每天的条件计数
Conditional count per day from pandas dataframe
我有一个数据集,每分钟有一个设备的读数(储罐液位),我想创建一个新的数据集(数据框),其中包含每天的样本数量和高于 a 的读数数量设置值。
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
列中的 'True' 值的数量,以计算出每天在 Overflow
中的分数
我觉得 resample
或 groupby
将是可行的方法,但我不知道如何创建仅包含这些计数的新数据集并包含 条件从Overflow
列开始计数
首次使用:
df['Overflow'] = df['Noxious Tank Level.MIN'] > 89
然后对于计数 True
s 使用 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'])
我有一个数据集,每分钟有一个设备的读数(储罐液位),我想创建一个新的数据集(数据框),其中包含每天的样本数量和高于 a 的读数数量设置值。
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
列中的 'True' 值的数量,以计算出每天在 Overflow
我觉得 resample
或 groupby
将是可行的方法,但我不知道如何创建仅包含这些计数的新数据集并包含 条件从Overflow
列开始计数
首次使用:
df['Overflow'] = df['Noxious Tank Level.MIN'] > 89
然后对于计数 True
s 使用 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'])