Pandas_data frame / Python: Как отсортировать столбец фрейма данных на основе его наибольшего числа повторных значений? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть фрейм данных, как показано ниже

import pandas as pd

df = pd.DataFrame({'UserId': [1,2,2,3,3,3,4,4,4,4], 'Value': [1,2,3,4,5,6,7,8,9,0]})

print(df)

Теперь я хочу отсортировать / отобразить столбец UserId на основе его наибольшего повторного значения.В приведенном выше кадре данных порядок 4,3,2,1.Теперь мой ожидаемый результат будет таким, как показано ниже

df = pd.DataFrame({'UserId': [4,4,4,4,3,3,3,2,2,1], 'Value': [7,8,9,0,4,5,6,2,3,1]})

print(df) 

Здесь я сделал вручную.Мне нужен код для больших значений фрейма данных.Веди меня в мою ситуацию.Заранее спасибо.

1 Ответ

0 голосов
/ 04 марта 2019

Сначала вы можете получить счетчик для каждого UserId:

>>> counts = df.UserId.value_counts()
>>> counts
4    4
3    3
2    2
1    1
Name: UserId, dtype: int64

Затем вы можете создать новый столбец, в котором указан счет UserId для каждого пользователя (также можно сделать с помощью слияния):

>>> df['UserIdCount'] = df['UserId'].apply(lambda x: counts.loc[x])
>>> df
   UserId  Value  UserIdCount
0       1      1            1
1       2      2            2
2       2      3            2
3       3      4            3
4       3      5            3
5       3      6            3
6       4      7            4
7       4      8            4
8       4      9            4
9       4      0            4

Затем вы просто сортируете по этому столбцу:)

>>> df = df.sort_values('UserIdCount', ascending=False)
>>> df
   UserId  Value  UserIdCount
6       4      7            4
7       4      8            4
8       4      9            4
9       4      0            4
3       3      4            3
4       3      5            3
5       3      6            3
1       2      2            2
2       2      3            2
0       1      1            1

Ура!

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