Определите максимальное количество в пандах, сгруппированных по df, и используйте это в качестве критерия для возврата записей. - PullRequest
0 голосов
/ 01 октября 2018

Полдень все,

У меня есть большой объем данных за один месяц.Я хотел бы:

a.Найдите книгу с наибольшим количеством сделок за этот период месяцев.

b.Зная это, вы можете получить сводную сводку по всем сделкам, совершенным с этой книгой за месяц, но отобразить месячные сделки за каждый час 24-часовых часов.

Вот примерный набор данных:

df_Highest_Traded_Away_Book = [                            
                                ('trading_book', ['A', 'A','A','A','B','C','C','C']),                            
                                ('rfq_create_date_time', ['2018-09-03 01:06:09', '2018-09-08 01:23:29', 
                                                          '2018-09-15 02:23:29','2018-09-20 03:23:29',
                                                          '2018-09-20 00:23:29','2018-09-25 01:23:29',
                                                          '2018-09-25 02:23:29','2018-09-30 02:23:29',])

                            ]

df_Highest_Traded_Away_Book = pd.DataFrame.from_items(df_Highest_Traded_Away_Book)
display(df_Highest_Traded_Away_Book)

    trading_book    rfq_create_date_time
0              A    2018-09-03 01:06:09
1              A    2018-09-08 01:23:29
2              A    2018-09-15 02:23:29
3              A    2018-09-20 03:23:29
4              B    2018-09-20 00:23:29
5              C    2018-09-25 01:23:29
6              C    2018-09-25 02:23:29
7              C    2018-09-30 02:23:29    

df_Highest_Traded_Away_Book['rfq_create_date_time'] = pd.to_datetime(df_Highest_Traded_Away_Book['rfq_create_date_time'])
df_Highest_Traded_Away_Book['Time_in_GMT'] =  df_Highest_Traded_Away_Book['rfq_create_date_time'].dt.hour
display(df_Highest_Traded_Away_Book)

    trading_book    rfq_create_date_time    Time_in_GMT
0              A    2018-09-03 01:06:09               1
1              A    2018-09-08 01:23:29               1
2              A    2018-09-15 02:23:29               2
3              A    2018-09-20 03:23:29               3
4              B    2018-09-20 00:23:29               0
5              C    2018-09-25 01:23:29               1
6              C    2018-09-25 02:23:29               2
7              C    2018-09-30 02:23:29               2

df_Highest_Traded_Away_Book =  df_Highest_Traded_Away_Book.groupby(['trading_book']).size().reset_index(name='Traded_Away_for_the_Hour').sort_values(['Traded_Away_for_the_Hour'], ascending=False)   
display(df_Highest_Traded_Away_Book)

  trading_book  Trades_Bucketted_into_the_Hour_They_Occured
0            A                         4
2            C                         3
1            B                         1

display(df_Highest_Traded_Away_Book['Traded_Away_for_the_Hour'].max())

4 

то есть книга A имеет наибольшее количество сделок в месяце

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

Time_in_GMT Trades_Book_A_Bucketted_into_the_Hour_They_Occured
0                     0
1                     2
2                     1
3                     1
4                     0
.                     0
.                     0
.                     0
24                    0

Любая помощь будет оценена.Я полагаю, что есть какой-то способ вернуть критерии в одной строке кода.

1 Ответ

0 голосов
/ 01 октября 2018

Используйте Series.idxmax для верхней книги:

df_Highest_Traded_Away_Book['rfq_create_date_time'] = pd.to_datetime(df_Highest_Traded_Away_Book['rfq_create_date_time'])
df_Highest_Traded_Away_Book['Time_in_GMT'] =  df_Highest_Traded_Away_Book['rfq_create_date_time'].dt.hour

df_Highest_Book =  df_Highest_Traded_Away_Book.groupby(['trading_book']).size().idxmax()
#alternative solution
#df_Highest_Book =  df_Highest_Traded_Away_Book['trading_book'].value_counts().idxmax()  
print(df_Highest_Book)
A

Затем сравните по eq (==), совокупность sum для подсчета True значений и добавления отсутствующих значений на reindex:

df_Highest_Traded_Away_Book = (df_Highest_Traded_Away_Book['trading_book']
                                      .eq(df_Highest_Book)
                                      .groupby(df_Highest_Traded_Away_Book['Time_in_GMT'])
                                      .sum()
                                      .astype(int)
                                      .reindex(np.arange(25), fill_value=0)
                                      .to_frame(df_Highest_Book))

print(df_Highest_Traded_Away_Book)
             A
Time_in_GMT   
0            0
1            2
2            1
3            1
4            0
5            0
6            0
7            0
8            0
9            0
10           0
11           0
12           0
13           0
14           0
15           0
16           0
17           0
18           0
19           0
20           0
21           0
22           0
23           0
24           0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...