如何在3个不同组中的单个数据帧中重新采样数据

时间:2014-07-04 17:15:33

标签: python python-2.7 pandas

我有一个数据框,想要在数据集中存在的3个不同的“用户”中重新采样某些列(作为每小时总和和10分钟数据的均值)。

正常的重新采样将使用如下代码:

import pandas as pd
import numpy as np    

df = pd.read_csv('example.csv')

df['Datetime'] = pd.to_datetime(df['date_datetime/_source'] + ' ' + df['time']) #create datetime stamp
df.set_index(df['Datetime'], inplace = True)

df = df.resample('1H', how={'energy_kwh': np.sum, 'average_w': np.mean, 'norm_average_kw/kw': np.mean, 'temperature_degc': np.mean, 'voltage_v': np.mean})
df

要获得结果(请原谅列格式,我不知道如何正确粘贴以使其看起来不错):

                   energy_kwh norm_average_kw/kw    voltage_v   temperature_degc    average_w
Datetime                    
2013-04-30 06:00:00  0.027   0.007333    266.333333  4.366667    30.000000
2013-04-30 07:00:00  1.250   0.052333    298.666667  5.300000    192.500000
2013-04-30 08:00:00  5.287   0.121417    302.333333  7.516667    444.000000
2013-04-30 09:00:00  12.449  0.201000    297.500000  9.683333    726.000000
2013-04-30 10:00:00  26.101  0.396417    288.166667  11.150000   1450.000000
2013-04-30 11:00:00  45.396  0.460250    282.333333  12.183333   1672.500000
2013-04-30 12:00:00  64.731  0.440833    276.166667  13.550000   1541.000000
2013-04-30 13:00:00  87.095  0.562750    284.833333  13.733333   2084.500000

但是,在原始CSV中,有一个包含URL的列 - 在100,000行的数据集中,有3个不同的URL(实际为ID)。我希望每个人都进行单独的重新采样,而不是从所有人那里进行“重组”重采样(例如,2014-01-01上午9点将有所有3个用户的数据,但每个用户应该拥有自己的每小时总和并且意味着)。

我希望这是有道理的 - 如果我需要澄清任何事情,请告诉我。

仅供参考,我尝试使用以下2个帖子中的建议,但无济于事:

Resampling a multi-index DataFrame

Resampling Within a Pandas MultiIndex

提前致谢

1 个答案:

答案 0 :(得分:0)

在这个最小的示例中,您可以resample groupby一个由URL分组的对象:

In [157]:

df=pd.DataFrame({'Val': np.random.random(100)})
df['Datetime'] = pd.date_range('2001-01-01', periods=100, freq='5H') #create random dataset
df.set_index(df['Datetime'], inplace = True)
df.__delitem__('Datetime')
df['Location']=np.tile(['l0', 'l1', 'l2', 'l3', 'l4'], 20)
In [158]:

print df.groupby('Location').resample('10D', how={'Val':np.mean})
                                   Val
Location Datetime                     
l0       2001-01-01 00:00:00  0.334183
         2001-01-11 00:00:00  0.584260
l1       2001-01-01 05:00:00  0.288290
         2001-01-11 05:00:00  0.470140
l2       2001-01-01 10:00:00  0.381273
         2001-01-11 10:00:00  0.461684
l3       2001-01-01 15:00:00  0.703523
         2001-01-11 15:00:00  0.386858
l4       2001-01-01 20:00:00  0.448857
         2001-01-11 20:00:00  0.310914