Получить уникальные значения столбца в кадре данных по другому условию столбца в python - PullRequest
3 голосов
/ 05 мая 2020

Dataframe:

id  name        count
123 ssdf        1
123 wasdfasdf   1
234 ewdd        0
345 efdfg       2
345 efg         1
345 gfdfg       1
456 gfdfg       1
456 ffg         1
567 vd          3

Здесь есть столбцы id и count, сколько идентификаторов там, где count 1. Если один id имеет 1,1,1, то мне нужен этот идентификатор в списке результатов . если идентификатор имеет 0,1,1, то неважно. если идентификатор равен 0,3,0, то неважно.

Ожидаемый результат:

list_1 = ['123','456']

также могу ли я ожидать ответа в виде функции в python.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Обеспечивает относительно медленное, но легкое для понимания решение.

target1 = df.query("count == 1").id.unique() # possible candidates
target2 = df.query("count != 1").id.unique() # candidates wish to exclude

list_1 = []

for i in target1:
    if i not in target2:
        list_1.append(i)

print(list_1)

OutPut:

['123', '456']
0 голосов
/ 05 мая 2020

IIU C,

df.loc[df.groupby('id')['count'].transform(lambda x: (x.nunique() == 1) & (x == 1)), 'id'].unique()

Вывод:

array([123, 456])  

Использование преобразования для маркировки каждой записи, если она принадлежит 'id' только с одним счетчиком, и этот счетчик равно 1. Затем используйте логическую фильтрацию индекса и выбор столбца, чтобы получить только эти значения, и используйте unique для создания списка уникальных идентификаторов.

В качестве функции ...

def unique_list_ids(df, valuecount):
    resultlist = (df.loc[df.groupby('id')['count']
                           .transform(lambda x: (x.nunique() == 1) & 
                                                (x == valuecount)), 
                         'id'].unique())
    return resultlist

unique_list_ids(df, 1)

Выход:

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