Конвертируйте этот Фрейм данных весов / баллов в Имя списка кулонов с сортировкой в ​​соответствии с форматом матрицы весов / баллов Фрейм данных в Python Pandas - PullRequest
1 голос
/ 25 апреля 2019
  • Преобразование этого балла пользовательской категории в балл пользовательской топ-категории с пользовательским фреймом и там максимум 3 имени категории в Python Pandas Dataframe

    Input DataFrame
    user_id  cat_1  cat_2   cat_3   cat_4   cat_5   cat_6
    1        0.10   0.2     0.20    0.12    0.7     0.6 
    2        0.6    0.20    0.12    0.15    0.13    0.11    
    3        0.11   0.10    0.8     0.12    0.3     0.7
    4        0.2    0.11    0.12    0.6     0.9     0.21
    5        0.9    0.8     0.5     0.1     0.0     0.11    
    
    
    Desired Output DataFrame
    user_id     top_3_categories
    1           [cat_3, cat_4, cat_1]
    2           [cat_2, cat_4, cat_3]
    3           [cat_4, cat_1, cat_2]
    4           [cat_6, cat_3, cat_2]
    5           [cat_6, cat_1, cat_2]   
    

1 Ответ

1 голос
/ 25 апреля 2019

Используйте numpy.argsort для позиций по отсортированным значениям в строках с именами столбцов широковещания и фильтрации только 3 значений в строках:

df = df.set_index('user_id')
arr = df.columns.values[np.argsort(-df.values)[:, -3:]].tolist()

df1 = pd.DataFrame({'user_id': df.index, 'top_3_categories':arr})
print (df1)
   user_id       top_3_categories
0        1  [cat_3, cat_4, cat_1]
1        2  [cat_5, cat_3, cat_6]
2        3  [cat_4, cat_1, cat_2]
3        4  [cat_1, cat_3, cat_2]
4        5  [cat_6, cat_4, cat_5]

Или:

arr = df.columns.values[np.argsort(-df.values)[:, :3]].tolist()

df1 = pd.DataFrame({'user_id': df.index, 'top_3_categories':arr})
print (df1)
   user_id       top_3_categories
0        1  [cat_5, cat_6, cat_2]
1        2  [cat_1, cat_2, cat_4]
2        3  [cat_3, cat_6, cat_5]
3        4  [cat_5, cat_4, cat_6]
4        5  [cat_1, cat_2, cat_3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...