Как найти несколько уклонов для каждого часа, где индексом является метка времени? - PullRequest
3 голосов
/ 24 октября 2019

Таким образом, моя df - это показания датчика в минуту. Я хочу найти уклоны для каждого часа чтения, то есть каждый 1 час должен иметь значение 1 уклона. Как это сделать?

Я попробовал linregress groupby.apply, не работает, также попытался сгруппировать 60 строк, но это просто дает средние значения за час. Столбец 1 - это T_a, а столбец 2 - Q_a. Я хочу значения наклона для T_am против Q_a для каждого часа.

df.head()
2019-01-09 17:03:00   3.09125   93.353877
2019-01-09 17:04:00   3.08575   89.513643
2019-01-09 17:05:00   3.10325   92.700350
2019-01-09 17:06:00   3.08075   91.089470
2019-01-09 17:07:00   3.08200   92.563898

df = df.groupby(index).apply(lambda df: linregress(df.T_am, df.Q_a)[0])

KeyError: Timestamp('2019-01-09 18:02:00')

1 Ответ

2 голосов
/ 24 октября 2019

Вам нужно groupby в часы вашего индекса, если у вас есть только один день измерений, это должно работать:

df.groupby(index.hour).apply(lambda df: linregress(df.T_am, df.Q_a)[0])

Если у вас есть несколько дней, я сначала создал бы столбец, содержащий ваш индексокругляется до часа, а затем группируется по этому индексу:

df['index_hour']=df.index.floor('h')
df.groupby('index_hour').apply(lambda df: linregress(df.T_am, df.Q_a)[0])

Если вы хотите сохранить несколько параметров из линейной регрессии, вы можете использовать следующий скрипт:

def extract_lr(x):
    lr = linregress(x['T_am'], x['Q_a'])
    return pd.Series([lr.slope, lr.intercept, lr.rvalue, lr.pvalue],
                     index=['slope', 'intercept', 'rvalue','pvalue'])

df.groupby('index_hour').apply(lambda x: extract_lr(x))

кредитует этот ответ .

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