来自熊猫数据框的每天条件计数

时间:2021-06-23 09:34:23

标签: python pandas pandas-groupby pandas-resample

我有一个数据集,每分钟有一个设备的读数(坦克级别),我想创建一个新的数据集(数据框),其中包含每天的样本数和高于设定值的读数数.

        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 列中“真”值的数量,以计算溢出中每天的比例

我觉得 resamplegroupby 将是可行的方法,但我不知道如何仅使用这些计数创建新数据集并包含 条件< /em> 来自 Overflow 列的计数

1 个答案:

答案 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'])