Использование словаря для создания нового столбца из существующих - PullRequest
0 голосов
/ 01 мая 2020

Суть вопроса заключается в «создании нового столбца в DataFrame» на основе существующего столбца «user_id» и словаря {dict}, который содержит ключи словарных значений столбца «user_id» и значения словарь их типы.

У меня есть следующий DataFrame df.

    df = pd.DataFrame({"user_id" : [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5], 
                  "value" : [0, 100, 50, 0, 25, 50, 100, 0, 7, 8, 20]})
    print(df)
     | user_id | value 
     _________________

0    |     1   |    0  
1    |     2   |  100  
2    |     2   |   50  
3    |     3   |    0  
4    |     3   |   25  
5    |     3   |   50  
6    |     4   |  100  
7    |     4   |    0  
8    |     4   |    7  
9    |     4   |    8  
10   |     5   |   20  

Кроме того, у меня есть словарь, который

dict = {1 : 'type_a', 2: 'type_b', 3: 'type_a', 4: 'type_b', 5: 'type_a'}

Моя идея это создать третий столбец в моем DataFrame df, который будет называться тарифом, поэтому, если у меня есть user_id 3, все строки в DataFrame будут иметь тариф типа a.

Я нашел одно решение, но я не совсем понимаю, как это реализовано.

df['tariffs'] = df.apply(lambda x: dict[x.user_id], axis=1)
print(df)
     | user_id | value |
     _________________________

0    |     1   |    0  |type_a
1    |     2   |  100  |type_b
2    |     2   |   50  |type_b
3    |     3   |    0  |type_a
4    |     3   |   25  |type_a
5    |     3   |   50  |type_a
6    |     4   |  100  |type_b
7    |     4   |    0  |type_b
8    |     4   |    7  |type_b
9    |     4   |    8  |type_b
10   |     5   |   20  |type_a

Результат, который я получаю после этой строки кода, - именно то, что я хочу

Особенно я не понимаю эту часть dict[x.user_id] Вопрос в том, есть ли альтернативы методу, который я использовал. И что такое логика c за dict[x.user_id]. Заранее спасибо

1 Ответ

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

Это более ясно написано так:

df['tariffs'] = df.apply(lambda row: dict[row['user_id']], axis=1)

Лямбда-функция применяется к каждой строке (потому что ось = 1) кадра данных, результат объединяется и затрагивается в новом столбце df [' тарифы]

...