Я создал df с разными курсами и списком с ценами. Мне нужно назначить цены всем курсам в фрейме данных - например, все курсы английского языка в df должны иметь первую цену из прайс-листа, все курсы финансов должны иметь вторую цену из прайс-листа и т. д. (порядок не имеет значения). Какие-либо предложения?
import random
import pandas as pd
import numpy as np
courses_list = ['Programming', 'Data Science', 'Data Analytics', 'Business Management', 'English', 'Design', 'Finance']
courses = []
for i in range(500):
courses.append(random.choice(courses_list))
price = np.random.randint(50000, 100000, 7)
name = np.arange(500)
df = pd.DataFrame({'used_id':name,
'course_name':courses})
df
Используйте dict comprehension
с Series.map
:
# Create a dict with key as course_name and value as price
In [2358]: course_price = {i:price[c] for c, i in enumerate(courses_list)}
# Use `map` function to map the price for each course from dict to df
In [2360]: df['price'] = df.course_name.map(course_price)
In [2361]: df
Out[2361]:
used_id course_name price
0 0 Business Management 56022
1 1 Data Analytics 85224
2 2 Programming 64843
3 3 Business Management 56022
4 4 Data Science 65005
.. ... ... ...
495 495 Business Management 56022
496 496 Data Analytics 85224
497 497 English 95012
498 498 Business Management 56022
499 499 Data Analytics 85224
[500 rows x 3 columns]
Создайте словарь из списка курсов и списка цен и используйте .map
:
df['price'] = df['course_name'].map(dict(zip(courses_list, price)))
Кажется, я опередил вас с ответом :)