Если я это сделаю
rr = pd.read_csv( 'refinedRatings.csv' )
lookrr = rr.loc[rr['user_id'] == 1]
lookrr.head(30)
Мои данные выглядят примерно так
Unnamed:0 user_id book_id rating
0 0 1 258 5
59 78 1 1796 5
148900 230483 1 4691 4
148901 230485 1 2063 4
148902 230489 1 11 5
148903 230490 1 1644 5
148904 230492 1 136 5
148905 230493 1 6665 4
148906 230495 1 35 5
148907 230496 1 33 4
148908 230500 1 10 4
148909 230502 1 4 5
148910 230505 1 1521 5
148911 230506 1 70 5
148912 230509 1 36 4
148913 230512 1 32 4
148914 230513 1 13 4
148915 230514 1 66 4
Поскольку это не совсем понятно из-за форматирования в стеке, вот изображение https://snag.gy/FyanEs.jpg
Но если я использую group by вот так
rr = pd.read_csv( 'refinedRatings.csv' )
rrgb= rr.groupby('user_id')
rrgb.head(200)
Тогда данные снова будут выглядеть так
Unnamed: 0 user_id book_id rating
0 0 1 258 5
1 1 2 4081 4
2 2 2 260 5
3 3 2 9296 5
4 5 2 26 4
5 7 2 33 4
6 8 2 301 5
7 9 2 2686 5
8 10 2 3753 5
9 11 2 8519 5
10 12 4 70 4
11 14 4 388 4
12 15 4 18 5
13 16 4 27 5
14 17 4 21 5
15 18 4 2 5
16 19 4 23 5
17 20 4 24 5
, image https://snag.gy/JugXGe.jpg
Так что кажется, чтогруппировка по операции исключает несколько строк, где 'user_id' равен 1.
Есть ли какое-либо объяснение этому?
Вот прямая ссылка на данные
https://drive.google.com/open?id=1v7Mm6S8BVtou1iIfobY43LRF8MgGdjfU
Также для исходного источника данных
https://github.com/zygmuntz/goodbooks-10k
Редактировать:
Я также установил индекс на user_id
ирезультат такой же, как когда я использовал groupby
код
rrfinal = pd.read_csv( 'refinedRatings.csv' ).set_index('user_id')
rrfinal.head(50)
результаты
Unnamed: 0 book_id rating
user_id
1 0 258 5
2 1 4081 4
2 2 260 5
2 3 9296 5
2 5 26 4
2 7 33 4
2 8 301 5
2 9 2686 5
2 10 3753 5
2 11 8519 5
4 12 70 4
4 14 388 4
4 15 18 5
4 16 27 5
4 17 21 5
4 18 2 5
4 19 23 5
4 20 24 5
Опять же, картина результатов https://snag.gy/RJTPvt.jpg
Редактировать:
В качестве меры предосторожности я преобразовал все записи в str, а затем обратно в int.
rr = rr.applymap(str)
rr = rr.applymap(int)
Ничего не изменилось.Все результаты из кода выше одинаковы.Однако, что интересно, после применения изменения типа данных, если я ищу все записи со строкой, он дает мне те же самые данные, как если бы я делал 'groupby', как до
rr[rr['user_id'].apply(lambda x: type(x)==str)]
rr.head(200)
Результат
Unnamed: 0 user_id book_id rating
0 0 1 258 5
1 1 2 4081 4
2 2 2 260 5
3 3 2 9296 5
4 5 2 26 4
5 7 2 33 4
6 8 2 301 5
7 9 2 2686 5
8 10 2 3753 5
9 11 2 8519 5
И снова картинка результата https://snag.gy/QarSCN.jpg