Используйте результат группового панды для запроса даты из диапазона дат вырезок панд в столбце - PullRequest
1 голос
/ 13 июня 2019

Итак, я получил результат вызова pandas.groupby(), и я хочу запросить результат в запросе в стиле mysql select. Вот MWE кода, из которого я пытаюсь работать:

import pandas as pd
import numpy as np
from datetime import datetime as dt

dates = np.array([dt(2012, 9, 27, 8, 52, 21),
       dt(2012, 10, 6, 5, 4, 15),
       dt(2012, 10, 7, 4, 53, 4),
       dt(2012, 10, 9, 7, 21, 18),
       dt(2012, 10, 10, 5, 4, 8),
       dt(2012, 10, 11, 4, 58, 43),
       dt(2012, 10, 12, 11, 15, 25),
       dt(2012, 10, 13, 10, 45, 23),
       dt(2012, 10, 20, 6, 0, 25),
       dt(2012, 10, 22, 7, 41, 38)])

values = np.array([5.61006523, 5.39632183, 5.49317193, 5.42327983, 5.4623386, 
                   5.42444747, 5.60362929, 5.57041331, 5.34893575, 5.48222005])

date_bins = np.array([dt(2012, 9, 29, 14),
                      dt(2012, 10, 10, 14),
                      dt(2012, 10, 14, 14),
                      dt(2012, 10, 23, 14)])

df1 = pd.DataFrame({'date':dates, 'value': values})
df2 = pd.DataFrame({'bin_dates':date_bins})

print(df1.groupby(pd.cut(df1['date'], df2['bin_dates'])).agg({'value':np.nanmean}))

Уступая:

                                               value
date                                                
(2012-09-29 14:00:00, 2012-10-10 14:00:00]  5.443778
(2012-10-10 14:00:00, 2012-10-14 14:00:00]  5.532830
(2012-10-14 14:00:00, 2012-10-23 14:00:00]  5.415578

По сути, я создаю представление данных гистограммы профиля с настраиваемым временным биннингом. Вопрос, который у меня сейчас возникает, заключается в том, что я пытаюсь использовать результат этого для запроса новых времен (скажем, 2012-10-11 3:00:00) и возможности получить среднее значение из этого связанного бина (5.532830). Может кто-нибудь посоветовать мне, как это сделать? Возможно ли это в рамках панд? Или мне нужно переместить данные в нечто вроде mysql?

1 Ответ

2 голосов
/ 13 июня 2019

Вы можете использовать .loc

s=df1.groupby(pd.cut(df1['date'], df2['bin_dates'])).agg({'value':np.nanmean})
s.loc['2012-10-11 3:00:00']
Out[94]: 
value    5.53283
Name: (2012-10-10 14:00:00, 2012-10-14 14:00:00], dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...