Панды и словарь: Как получить все уникальные значения для каждого ключа?

#python #pandas

Вопрос:

Я хочу создать словарь таким образом, чтобы значение в паре ключ-значение было каждым уникальным значением для этого ключа.

Рассмотрим этот пример:

 df = pd.DataFrame({'id': [1, 2, 3, 1, 2, 3], 'vals': ['a1', 'a2', 'a3', 'a2', 'a2a', 'a3a']})

# only yields last entry
dict(zip(df['id'], df['vals']))
# results
{1: 'a2', 2: 'a2a', 3: 'a3a'}

# expected value
{1: ['a1', 'a2'], 2: ['a2', 'a2a'], 3: ['a3', 'a3a']}
 

Комментарии:

1. Два текущих ответа хороши, но имейте в виду, что если значение повторяется для одного и того же идентификатора, оно будет повторено в выходном словаре 🙂

Ответ №1:

Воспользуйся:

 result = df.groupby("id")["vals"].agg(list).to_dict()
print(result)
 

Выход

 {1: ['a1', 'a2'], 2: ['a2', 'a2a'], 3: ['a3', 'a3a']}
 

Ответ №2:

Вы могли бы использовать понимание под диктовку, например, так:

 {k: group['vals'].tolist() for k, group in df.groupby('id')}
 

какие результаты

 {1: ['a1', 'a2'], 2: ['a2', 'a2a'], 3: ['a3', 'a3a']}
 

Комментарии:

1. Я особенно ценю диктант комп

Ответ №3:

 print(df.groupby('id')['vals'].apply(lambda x: x.tolist()).to_dict())