Выберите значения из одного столбца на основе значений из другого столбца - python - PullRequest
2 голосов
/ 25 сентября 2019

У меня есть большой фрейм данных df1, который выглядит следующим образом:

DeviceID     Location
1            Internal
1            External   
2            Internal   
2            Internal   
3            Internal   
3            External   
3            Internal
4            Internal   
4            Internal
5            External   
5            Internal   

Я пытаюсь найти и выбрать строки, в которых записан отдельный DeviceID с обоими «Внутренними» И «Внешние »значения в столбце Location.

Следующим шагом будет удаление этих строк из кадра данных.Конечный фрейм данных df2 будет выглядеть так:

DeviceID     Location
2            Internal   
2            Internal   
4            Internal   
4            Internal   

До сих пор я пытался: indexDI = df[(df['Location'] == 'Internal') & df['Location'] == 'External') ].index df.drop(indexDI, inplace = True)

, но, похоже, все строки отбрасывались с помощью "Внутренний».

Буду признателен за любую помощь:)

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Вы можете groupby, transform с помощью nunique, чтобы увидеть, какие группы содержат два разных значения, и использовать результат для выполнения логического индексирования на фрейме данных:

df[df.groupby('DeviceID').Location.transform('nunique').eq(1)]

     DeviceID  Location
2         2  Internal
3         2  Internal
7         4  Internal
8         4  Internal

Простое добавление reset_index(drop=True) для панды RangeIndex

0 голосов
/ 25 сентября 2019

еще одно решение без .loc,

df[(df.groupby('DeviceID').transform('nunique')!=2).values]

O / P:

   DeviceID  Location
2         2  Internal
3         2  Internal
7         4  Internal
8         4  Internal
0 голосов
/ 25 сентября 2019

Одним из решений было бы перебрать весь df и отбросить строки, если выполняются оба условия.Сейчас ваше решение проверяет одну и ту же строку, которая не может иметь оба критерия одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...