Чтение значений в pandas.groupby - PullRequest
3 голосов
/ 20 июня 2019

У меня есть датафрейм, как показано ниже

    name    item 
0   Jack    A
1   Sarah   B
2   Ross    A
3   Sean    C
4   Jack    C
5   Ross    B

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

{Jack: [1, 0, 1], Sarah: [0, 1, 0], Ross:[1, 1, 0], Sean:[0, 0, 1]}

Я чувствую, что это должно быть сделано довольно легко с помощью pandas.groupby

Я пробовал циклически проходить через фрейм данных, но у меня> 1E7 записей, и зацикливание выглядит не очень эффективно.

1 Ответ

4 голосов
/ 20 июня 2019

Проверьте с помощью crosstab и to_dict

pd.crosstab(df.item,df.name).to_dict('l')
{'Jack': [1, 0, 1], 'Ross': [1, 1, 0], 'Sarah': [0, 1, 0], 'Sean': [0, 0, 1]}

Еще один интересный вариант - str.get_dummies:

# if you need counts 
df.set_index('item')['name'].str.get_dummies().sum(level=0).to_dict('l')
# if you want to record boolean indicators 
df.set_index('item')['name'].str.get_dummies().max(level=0).to_dict('l')
# {'Jack': [1, 0, 1], 'Ross': [1, 1, 0], 'Sarah': [0, 1, 0], 'Sean': [0, 0, 1]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...