Pandas dataframe перевыбор и подсчет событий в день - PullRequest
0 голосов
/ 21 января 2019

У меня есть датафрейм с указателем времени.Я могу пересчитать данные, чтобы получить (например) среднее значение за день, однако я также хотел бы получить счет за день.Вот пример:

import datetime
import pandas as pd
import numpy as np

dates = pd.date_range(datetime.datetime(2012, 4, 5, 11, 
0),datetime.datetime(2012, 4, 7, 7, 0),freq='5H')

var1 = np.random.sample(dates.size) * 10.0
var2 = np.random.sample(dates.size) * 10.0
df = pd.DataFrame(data={'var1': var1, 'var2': var2}, index=dates)

df1=df.resample('D').mean() 

Я хотел бы также получить 3-й столбец 'count', который считает в день:

count
3
5
7

Большое спасибо!

1 Ответ

0 голосов
/ 21 января 2019

Использовать Resampler.agg и затем выравнивать MultiIndex в столбцах:

df1 = df.resample('D').agg({'var1': 'mean','var2': ['mean', 'size']}) 
df1.columns = df1.columns.map('_'.join)
df1 = df1.rename(columns={'var2_size':'count'})
print (df1)
            var1_mean  var2_mean  count
2012-04-05   3.992166   4.968410      3
2012-04-06   6.843105   6.193568      5
2012-04-07   4.568436   3.135089      1

Альтернативное решение с Grouper:

df1 = df.groupby(pd.Grouper(freq='D')).agg({'var1': 'mean','var2': ['mean', 'size']}) 
df1.columns = df1.columns.map('_'.join)
df1 = df1.rename(columns={'var2_size':'count'})
print (df1)
            var1_mean  var2_mean  count
2012-04-05   3.992166   4.968410      3
2012-04-06   6.843105   6.193568      5
2012-04-07   4.568436   3.135089      1

EDIT:

r = df.resample('D')
df1 = r.mean().add_suffix('_mean').join(r.size().rename('count'))
print (df1)
            var1_mean  var2_mean  count
2012-04-05   7.840487   6.885030      3
2012-04-06   4.762477   5.091455      5
2012-04-07   2.702414   6.046200      1
...