датафрейм сортирует столбцы и удаляет дублированное значение - PullRequest
0 голосов
/ 26 апреля 2018

у меня есть датафрейм df

        user_id     o_date      month

2          3      2017-05-15      4
3          3      2017-05-15      4
6          1      2017-05-25      4
22         7      2017-05-27      4
25         1      2017-05-23      4
26         3      2017-05-12      4
29         3      2017-05-13      4
39         7      2017-05-08      4
70         1      2017-05-25      4

Я хочу отсортировать user_id, чтобы получить новый фрейм данных, в котором результирующий объект будет располагаться в порядке убывания, так что первый элемент является наиболее часто встречающимся элементом. Так же, как и метод Series.value_counts()

Я хочу output вот так:

       user_id     o_date      month

2          3      2017-05-15      4
3          3      2017-05-15      4
26         3      2017-05-12      4
29         3      2017-05-13      4
6          1      2017-05-25      4
25         1      2017-05-23      4
70         1      2017-05-25      4
22         7      2017-05-27      4
39         7      2017-05-08      4

Так как же получить output Thx!

Edit: Я получаю output. Теперь я хочу удалить дублированный user_id в соответствии с o_date (с тем же user_id, который я выбрал o_date, который часто встречается), точно так же, как окончательный result:

        user_id     o_date      month
2          3      2017-05-15      4
6          1      2017-05-25      4
22         7      2017-05-27      4

Я новичок в области данных, еще раз спасибо!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Ответ jezrael - это действительно крутая однострочная строка, но вы также можете добавить некоторые вспомогательные столбцы «count» на случай, если вам нужно отслеживать частоту:

df['count'] = df.groupby('user_id')['user_id'].transform(pd.Series.value_counts)
df.sort_values('count', ascending=False)

Выход:

        month  user_id  count
2       4        3      4
3       4        3      4
26      4        3      4
29      4        3      4
6       4        1      3
25      4        1      3
70      4        1      3
22      4        7      2
39      4        7      2
0 голосов
/ 26 апреля 2018

Использование:

df = df.iloc[(-df['user_id'].map(df['user_id'].value_counts())).argsort()]
print (df)
    user_id      o_date  month
2         3  2017-05-15      4
3         3  2017-05-31      4
26        3  2017-05-12      4
29        3  2017-05-13      4
6         1  2017-05-25      4
25        1  2017-05-23      4
70        1  2017-05-17      4
22        7  2017-05-27      4
39        7  2017-05-08      4

Объяснение

1.Первое получение рассчитывается на value_counts

print (df['user_id'].value_counts())
3    4
1    3
7    2
Name: user_id, dtype: int64

2. map столбец user_id

print (df['user_id'].map(df['user_id'].value_counts()))
2     4
3     4
26    4
29    4
6     3
25    3
70    3
22    2
39    2
Name: user_id, dtype: int64

3.Получить argsort в в порядке убывания для позиций:

print ((-df['user_id'].map(df['user_id'].value_counts())).argsort())
2     0
3     1
26    2
29    3
6     4
25    5
70    6
22    7
39    8
Name: user_id, dtype: int64

4. И последний выбор iloc для нового заказа

РЕДАКТИРОВАТЬ: Для удаления дубликатов по столбцу используйте drop_duplicates:

df = df.drop_duplicates('user_id')
print (df)
    user_id      o_date  month
2         3  2017-05-15      4
6         1  2017-05-25      4
22        7  2017-05-27      4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...