столкнулся с проблемой в модификации колонки панды - PullRequest
2 голосов
/ 29 мая 2020

Я столкнулся со странным сценарием. У меня есть фрейм данных с 3 наибольшими оценками для уникальной строки, например:

id   rid   code  score
1    9    67    43
1    8    87    22 
1    4    32    20
2    3    56    43
3    10.  22    100
3.   5    67.    50

Здесь столбец id такой же, но по строкам он другой.
Я хочу сделать свой фрейм данных следующим образом:

id   first_code  second_code    third_code
1     67          87            32
2.    56.         none.         none
3     22.         67.           none

Итак, я создал свой фрейм данных, который показывает наивысшие 3 балла. Если нет трех лучших значений, я беру два лучших или единственное значение, которое является оценкой. Итак, в зависимости от значения оценки, я хочу переупорядочить столбец кода на три разных столбца, так как пример first_code представляет наивысшее значение, second_score представляет второе по величине, third_code представляет третье по величине значение. Если ничего не найдено, я сделаю эти заготовки.

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

2 голосов
/ 29 мая 2020

Используйте GroupBy.cumcount для счетчика, создайте MultiIndex и измените форму на Series.unstack:

df = df.set_index(['id',df.groupby('id').cumcount()])['code'].unstack()
df.columns=['first_code', 'second_code', 'third_code']
df = df.reset_index()
print (df)
    id  first_code  second_code  third_code
0  1.0        67.0         87.0        32.0
1  2.0        56.0          NaN         NaN
2  3.0        22.0         67.0         NaN

Кстати, cumcount следует использовать также в предыдущем коде для значений фильтра top3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...