熊猫:查找包含重复项的行集

时间:2019-11-05 18:24:36

标签: python pandas

我有一个存储在熊猫数据框中的传感器数据列表,如下所示:

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。

感谢您的帮助!

2 个答案:

答案 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的行将重复