#python #pandas
#питон #панды
Вопрос:
Это один из вопросов и задач, которые я должен выполнять чаще всего в течение дня.
У меня есть следующие столбцы фрейма данных:
USER_ID, BRAND_ID, CLICKS
1, 100, 50
2, 120, 40
1, 200, 4
....
И мне нужно преобразовать его в список, например, для пользователя 1
[100, 200]
Комментарии:
1.
{k:v for k, v in df.groupby('USER_IF')['BRAND_ID']}
2. Вы хотите создать dict с
USER_ID
as key,BRAND_ID
as values и выброситьCLICKS
?3. Да, правильно 🙂
Ответ №1:
Давайте подумаем, что мы уже прочитали файл CVS через pandas
path = 'data/users_clicks.csv'
df = pd.read_csv(path)
И тогда у вас есть следующие столбцы:
USER_ID, BRAND_ID, CLICKS
1, 100, 50
2, 120, 40
1, 200, 4
....
И как только у нас будут эти данные, мы хотим сгруппировать их по пользователю и преобразовать в список, чтобы позже обработать этот результат, например, добавив его в пользовательский словарь.
Чтобы иметь возможность фильтровать их по pandas и не использовать for , мы делаем:
user_list = df[df['USER_ID'] == 1]
print(user_list['BRAND_ID'].tolist())
Результат:
[100, 200]
Таким образом, вы экономите много итеративного кода и используете Pandas для его достижения.
Ответ №2:
Сгруппируйте по USER_ID
и выберите BRAND_ID
, агрегированный в список:
df.groupby('USER_ID')['BRAND_ID'].agg(list)
# Gives:
USER_ID
1 [100, 200]
2 [120]
Name: BRAND_ID, dtype: object
Преобразуйте это в a dict
, чтобы получить его в форме {USER_ID: [list of BRAND_IDS]}
для всех пользователей:
user_brands = df.groupby('USER_ID')['BRAND_ID'].agg(list).to_dict()
# {1: [100, 200], 2: [120]}
А затем получить его только для пользователя 1
:
user_brands[1]
# [100, 200]