Groupy Pandas DataFrame с несколькими условиями - PullRequest
0 голосов
/ 26 февраля 2020

Мне нужно сгруппировать по одному полю, затем получить самые большие (14) записей в поле даты, затем получить среднее по другому полю, и я застреваю в логи c.

data = [['NRB000043', nan, None, Timestamp('2020-01-27 00:00:00')],
 ['NRB000042', nan, None, Timestamp('2020-01-27 00:00:00')],
 ['483951076', nan, None, Timestamp('2020-01-27 00:00:00')],
 ['080699991', nan, None, Timestamp('2020-01-27 00:00:00')],
 ['NRB000045', nan, None, Timestamp('2020-01-27 00:00:00')],
 ['530639995', 23.0, None, Timestamp('2020-01-27 00:00:00')],
 ['530639997', 24.0, None, Timestamp('2020-01-27 00:00:00')]]

df = pd.DataFrame(data, columns=['sid', 'measure', 'co_unit', 'timedate'])

series = df.groupby('sid')['timedate'].nlargest(14)


Итак, это то, что у меня есть, но я застрял, пытаясь получить среднее значение поля measure. Может кто-нибудь помочь мне с правильной логикой c?

Спасибо!

1 Ответ

1 голос
/ 26 февраля 2020

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

df.groupby('sid').agg({'timedate': lambda x: x.nlargest(14),
                       'measure': 'mean'})

print(df)

            timedate  measure
sid                          
080699991 2020-01-27      NaN
483951076 2020-01-27      NaN
530639995 2020-01-27     23.0
530639997 2020-01-27     24.0
NRB000042 2020-01-27      NaN
NRB000043 2020-01-27      NaN
NRB000045 2020-01-27      NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...