Подсчитайте среднесуточное значение с пандами - PullRequest
0 голосов
/ 02 октября 2018

У меня есть функция, которая будет вычислять средние значения в столбце «A» кадра данных панд, приходящихся на одну и ту же дату.Есть ли способ сделать это более эффективным, чем понимание списка в последней строке?

import pandas as pd
import numpy as np

def daily_mean(df,date,col):
     return df[date][col].mean()

data = np.random.rand(100)
columns = ['A']
times = pd.date_range('20180101',freq='9H',periods=100)
df = pd.DataFrame(data=data,index=times,columns=columns)

dates = df.index.strftime('%Y%m%d').unique()
means = [daily_mean(df,date,'A') for date in dates]

Ответы [ 2 ]

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

Вы можете сделать:

df.reset_index().groupby(pd.Grouper(key='index', freq='D'))['A'].mean()

index
2018-01-01    0.412354
2018-01-02    0.301209
2018-01-03    0.710357
2018-01-04    0.158135
2018-01-05    0.720308
...
0 голосов
/ 02 октября 2018

Да, вы можете использовать pd.Grouper API.Кроме того, это сохранит DataFrame, так что это беспроигрышный вариант.

means = df.groupby(pd.Grouper(freq='1D')).mean()

Или вы можете сгруппироваться по полу индекса даты и времени.

means = df.groupby(df.index.floor('D')).mean()

means.head(10)
                   A
2018-01-01  0.412354
2018-01-02  0.301209
2018-01-03  0.710357
2018-01-04  0.158135
2018-01-05  0.720308
2018-01-06  0.281862
2018-01-07  0.489486
2018-01-08  0.287808
2018-01-09  0.463117
2018-01-10  0.512963

Я предпочитаю подход № 1, поскольку pd.Grouper должен быть более эффективным, чем группировка по несвязанному ряду / массиву (как во втором виде). ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...