Добавить новый столбец в dataframe на основе среднего - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть фрейм данных, который включает в себя категорию проекта, валюту, количество инвесторов, цели и т. Д., И я хочу создать новый столбец, который будет иметь «средний показатель успеха по их категории»

   state        category main_category currency  backers country  \

0      0          Poetry    Publishing      GBP        0      GB   
1      0  Narrative Film  Film & Video      USD       15      US   
2      0  Narrative Film  Film & Video      USD        3      US   
3      0           Music         Music      USD        1      US   
4      1     Restaurants          Food      USD      224      US   

   usd_goal_real  duration  year       hour  
0        1533.95        59  2015    morning  
1       30000.00        60  2017    morning  
2       45000.00        45  2013    morning  
3        5000.00        30  2012    morning  
4       50000.00        35  2016  afternoon  

У меня есть средние показатели успеха в формате серии

Dance           65.435209

Theater         63.796134

Comics          59.141527

Music           52.660558

Art             44.889045

Games           43.890467

Film & Video    41.790649

Design          41.594386

Publishing      34.701650

Photography     34.110847

Fashion         28.283186

Technology      23.785582

, и теперь я хочу добавить в новый столбец, где каждый столбец будет иметь коэффициент успеха, соответствующий их категории, т. Е. Везде, где строка является технологиейновый столбец будет содержать 23,78 для этой строки

df [category_success_rate] = я хочу, чтобы выходной столбец был% успеха, который совпадает с категорией в столбце «главная категория»

1 Ответ

0 голосов
/ 12 декабря 2018

Я думаю, вам нужно GroupBy.transform с маской булены df['state'].eq(1) или (df['state'] == 1):

df['category_success_rate'] = (df['state'].eq(1)
                                 .groupby(df['main_category']).transform('mean') * 100)

Альтернатива:

df['category_success_rate'] = ((df['state'] == 1)
                                 .groupby(df['main_category']).transform('mean') * 100)
...