我有一个存储在熊猫数据框中的传感器数据列表,如下所示:
sensorID sensorEventTime sensorVal sensorStatus
12345 2019-01-01 14:05 0.00 PowerOff
23675 2019-01-01 14:08 3.75 EventOn
12345 2019-01-01 15:01 1.00 EventOn
86521 2019-01-01 15:02 2.75 EventOn
86521 2019-01-01 15:02 2.75 EventOff
12345 2019-01-01 15:01 1.00 EventOff
12345 2019-01-01 15:01 1.00 PowerOff
23675 2019-01-01 15:25 5.39 PowerOff
73412 2019-01-01 15:37 2.78 EventOn
...
有时传感器发生故障,您会看到两行具有相同的值,但“ sensorStatus”显示“ EventOn”和“ EventOff”对。 我想检测每组匹配的行,这些行的值都相同,但是sensorStatus处于打开和关闭的匹配对中。
我尝试使用重复项来检测基于sensorID,sensorEventTime和sensorVal的匹配项,如下所示:
# Variable data is the pandas data frame with the sensor values
duplicatedData = data[data.duplicated(['sensorID', 'sensorEventTime', sensorVal], keep=False)]
这将返回重复的行,如下所示:
12345 2019-01-01 15:01 1.00 EventOn
86521 2019-01-01 15:02 2.75 EventOn
86521 2019-01-01 15:02 2.75 EventOff
12345 2019-01-01 15:01 1.00 EventOff
12345 2019-01-01 15:01 1.00 PowerOff
但是我是否有办法根据'EventOn'和'EventOff'状态快速识别匹配对?在这种情况下,我将有2对,一对用于传感器12345,一对用于传感器8851。
感谢您的帮助!
答案 0 :(得分:1)
df[df[df.columns[:-1]].duplicated(keep=False)].sort_values(by='sensorID')
输出:
sensorID sensorEventTime sensorVal sensorStatus
2 12345 2019-01-01 15:01 1.00 EventOn
5 12345 2019-01-01 15:01 1.00 EventOff
3 86521 2019-01-01 15:02 2.75 EventOn
4 86521 2019-01-01 15:02 2.75 EventOff
答案 1 :(得分:0)
data.groupby(['sensorID', 'sensorEventTime', sensorVal]).count().reset_index()
将为您提供行计数-大于1的行将重复