Выберите строки в Dataframe, содержащие даты с максимальным количеством строк - PullRequest
0 голосов
/ 02 октября 2019

У меня есть Dataframe, HistDf5, с указателем даты и времени и 4 столбцами. Я хотел бы подсчитать количество строк на дату (т. Е. Количество «раз») в пределах каждой даты и выбрать эти даты с максимальным количеством «раз».

                     OPEN  CLOSE  HIGH    LOW        VOL
DTYYYYMMDD                                              
2011-01-02 18:00:00  0.00   1.25  1.50  -0.75  24.907415
2011-01-02 18:05:00  1.25   0.50  1.75   0.25  25.743008
2011-01-02 18:10:00  0.25   0.00  0.50   0.00  22.310852
2011-01-02 18:15:00  0.25   0.75  0.75   0.25  21.303043
2011-01-02 18:20:00  0.75   0.25  0.75   0.00  15.431916
                  ...    ...   ...    ...        ...
2014-06-24 23:35:00 -9.75  -9.50 -9.50 -10.00  16.471735
2014-06-24 23:40:00 -9.50  -9.50 -9.50 -10.00  18.634443
2014-06-24 23:45:00 -9.75  -9.50 -9.50 -10.00  13.974959
2014-06-24 23:50:00 -9.50  -9.75 -9.50  -9.75  12.305773
2014-06-24 23:55:00 -9.50  -9.75 -9.50  -9.75  15.471089

[365544 rows x 5 columns]

Расчет количества записейна даты просто. Однако, когда у меня есть нужные даты, я не знаю, как нарезать фрагмент данных, чтобы выбрать только те даты, которые имеют максимальное количество «раз».

CountDF = HistDf5.groupby(HistDf5.index.date)['VOL'].count()
IndxLst = CountDF[CountDF == CountDF.max()].index
HistDf5 = HistDf5.loc[IndxLst]


            OPEN  CLOSE  HIGH   LOW        VOL
2011-01-03   0.0   0.25  0.25  0.00   5.598422
2011-01-04   0.0   0.00  0.25  0.00   5.375278
2011-01-05   0.0   0.00  0.25  0.00   9.965758
2011-01-06   0.0  -0.25  0.00 -0.50  12.894489
2011-01-07   0.0   0.00  0.00 -0.25   3.871201
         ...    ...   ...   ...        ...
2014-06-20   0.0   0.00  0.00 -0.25  11.530156
2014-06-21   NaN    NaN   NaN   NaN   0.000000
2014-06-22   NaN    NaN   NaN   NaN   0.000000
2014-06-23   0.0   0.25  0.25  0.00   4.499810
2014-06-24   0.0   0.25  0.25  0.00  14.659017

[1269 rows x 5 columns]

1 Ответ

0 голосов
/ 02 октября 2019

Если я правильно понимаю, вы можете использовать преобразование, а затем выбрать максимальное количество.

df['COUNT'] = df.groupby(df.index.date)['VOL'].transform('count')
df.loc[df['COUNT'] == df['COUNT'].max()]


| DTYYYYMMDD          | OPEN  | CLOSE | HIGH | LOW   | VOL       | COUNT |
|---------------------|-------|-------|------|-------|-----------|-------|
| 2011-01-02 18:00:00 | 0     | 1.25  | 1.5  | -0.75 | 24.907415 | 5     |
| 2011-01-02 18:05:00 | 1.25  | 0.5   | 1.75 | 0.25  | 25.743008 | 5     |
| 2011-01-02 18:10:00 | 0.25  | 0     | 0.5  | 0     | 22.310852 | 5     |
| 2011-01-02 18:15:00 | 0.25  | 0.75  | 0.75 | 0.25  | 21.303043 | 5     |
| 2011-01-02 18:20:00 | 0.75  | 0.25  | 0.75 | 0     | 15.431916 | 5     |
| 2014-06-24 23:35:00 | -9.75 | -9.5  | -9.5 | -10   | 16.471735 | 5     |
| 2014-06-24 23:40:00 | -9.5  | -9.5  | -9.5 | -10   | 18.634443 | 5     |
| 2014-06-24 23:45:00 | -9.75 | -9.5  | -9.5 | -10   | 13.974959 | 5     |
| 2014-06-24 23:50:00 | -9.5  | -9.75 | -9.5 | -9.75 | 12.305773 | 5     |
| 2014-06-24 23:55:00 | -9.5  | -9.75 | -9.5 | -9.75 | 15.471089 | 5     |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...