Выберите строки с одинаковым идентификатором, но разными значениями в пандах - PullRequest
0 голосов
/ 29 мая 2018

Я знаю, что это возможно в программном обеспечении баз данных, но есть ли способ сделать это в Python Pandas?

ID1         ID2      Value
1209345     1203     2
1209345     1204     3 <-----
1209345     1205     4
1209345     1203     2
1209345     1204     7 <-----
1209346     1203     1
1209347     1204     5

У меня есть ID1 и, соответственно, у меня несколько ID2 ссопоставляется со значением.Мне нужно найти все записи, где ID1 и ID2 совпадают, но значения разные.

Мой текущий код подсчитывает количество уникальных комбинаций ID1 и ID2, но не учитываетдля уникального Value для каждой комбинации:

print(df.groupby(['ID1', 'ID2']).size())

ID1      ID2 
1209345  1203    2
         1204    2
         1205    1
1209346  1203    1
1209347  1204    1
dtype: int64

Примечание: Этот вопрос опубликован для @RohitGirdhar, который удалил свой оригинальный вопрос .Решение, которое я публикую, не обязательно является единственным или лучшим;другие ответы приветствуются.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы можете фильтровать с nunique и transform:

df = df[df.groupby(['ID1', 'ID2'])['Value'].transform('nunique') > 1]

print (df)
       ID1   ID2  Value
1  1209345  1204      3
4  1209345  1204      7
0 голосов
/ 29 мая 2018

Один из способов - от groupby до set, отфильтровать результирующий ряд, а затем отфильтровать исходный кадр данных по комбинации ID1 & ID2:

grps = df.groupby(['ID1', 'ID2'])['Value'].apply(set)
filtered = grps[grps.map(len) > 1].index

res = df[df.set_index(['ID1', 'ID2']).index.isin(filtered)]

print(res)

       ID1   ID2  Value
1  1209345  1204      3
4  1209345  1204      7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...