У меня есть CSV размером около 5 ГБ, структура и тип данных примерно такие:
datetime product name serial number
0 2017-06-24 14:30:15 orange 123456
1 2017-07-04 21:33:50 apple 123456
2 2017-07-06 06:38:52 orange 123456
3 2017-07-10 15:52:07 banana 123456
4 2017-07-10 15:52:51 banana 123456
5 2017-07-10 15:53:18 banana 123456
6 2017-07-11 11:50:40 pineapple 123456
7 2017-07-11 00:53:43 apple 54321
8 2017-07-11 06:23:52 apple 54321
9 2017-07-11 06:23:52 apple 12454
10 2017-07-11 06:23:52 apple 12454
11 2017-07-11 06:23:52 apple 12454
12 2017-07-11 06:23:52 apple 15039
13 2017-07-11 06:23:52 apple 15037
14 2017-07-11 06:23:52 apple 15039
15 2017-07-11 06:23:52 apple 15190
16 2017-07-11 06:23:52 apple 15039
17 2017-07-11 06:23:52 apple 15037
18 2017-07-11 06:23:52 apple 15037
19 2017-07-11 06:23:52 apple 15037
....
few millions more lines
df.dtypes
Out[134]:
datetime datetime64[ns]
name object
events int64
dtype: object
Вопрос 1. Как сгруппировать по названию продукта, а затем подсчитать количество серийных номеров только для 10 лучших продуктов (с наибольшим количеством вхождений сверху)?
# this does the count, but there are over 10,000 rows, and it is not sorted by counts f
df.groupby(['product name', 'serial number']).agg({'serial number':'count'}).compute()
# expected output (in table form):
product name serial number counts
orange 123456 2
orange 54321 12
apple 123456 1
apple 54321 4
pineapple 123456 16
Вопрос 2: Как я могу изобразить вхождение каждого серийного номера для одного названия продукта во временной области?
Вопрос 3: Я действительно хочу нанести на график вхождение каждого «серийного номера» для одного имени продукта во временной области, поэтому я могу выбрать «название продукта» из кадра данных, используя:
df_orange = df[df['proudct name'] == 'orange']
# how do I plot it?