Я хочу выбрать все строки в кадре данных, которые содержат значения, определенные в списке.
У меня есть два подхода, которые не работают, как ожидалось / хотели.
Мой фрейм данных выглядит примерно так:
Timestamp DEVICE READING VALUE
1 | DEV1 | READ1 | randomvalue
2 | DEV1 | READ2 | randomvalue
3 | DEV2 | READ1 | randomvalue
4 | DEV2 | READ2 | randomvalue
5 | DEV3 | READ1 | randomvalue
и у меня есть список (ls), подобный следующему:
[[DEV1, READ1], [DEV1, READ2], [DEV2,READ1]]
В этом сценарии я хочу удалить строки 4
и 5
:
Мой первый подход был:
df = df[(df['DEVICE']. isin([ls[i][0] for i in range(len(ls))])) &
(df['READING'].isin([ls[k][1] for k in range(len(ls))]))]
Проблема с этим, очевидно, в том, что он не удаляет строку 4, потому что DEV2 имеет READING READ2, но он должен удалить его.
Мой второй подход был:
df = df[(df[['DEVICE','READING']].isin({'DEVICE': [ls[i][0] for i in range(len(ls))],
'READING': [ls[i][1] for i in range(len(ls))] }))]
Этот выбирает правильные строки, но не удаляет другие строки. Вместо этого он устанавливает для каждой другой ячейки значение NaN, включая VALUE ROW, которую я хочу сохранить. И он не накапливает оба, поэтому строка 4 выглядит как 4 |DEV2|NaN|NaN
Какой самый простой или лучший способ решить эту проблему?
Вы можете мне помочь?
~ Fabian