Python 对a'重新采样;整洁';熊猫数据帧

Python 对a'重新采样;整洁';熊猫数据帧,python,pandas,Python,Pandas,我有两列感兴趣的时间戳数据:“标签”和计数。我想创建一个时间序列,每个标签每一天的总和。我可以使用重采样来实现这一点吗 具体例子: import pandas as pd import numpy as np from itertools import cycle idx = pd.date_range('2016-01-01', '2016-01-07', freq='H') n = np.random.randint(10, size=24*6+1) lst = [(l,c) for l,

我有两列感兴趣的时间戳数据:“标签”和计数。我想创建一个时间序列,每个标签每一天的总和。我可以使用
重采样
来实现这一点吗

具体例子:

import pandas as pd
import numpy as np
from itertools import cycle

idx = pd.date_range('2016-01-01', '2016-01-07', freq='H')
n = np.random.randint(10, size=24*6+1)
lst = [(l,c) for l,c in zip(cycle(['foo', 'bar']), n)]
df = pd.DataFrame(lst, index=idx, columns=['label', 'n'])

df.resample(???).sum()
对于本例,目标数据帧应包含一个时间索引和两列(
foo
bar
),其中包含每个间隔的总计数。

我认为您需要:

另一种使用
日期时间索引的解决方案:

print (df.set_index('label', append=True)
         .unstack(1)
         .resample('1D')
         .sum()
         .stack()
         .reset_index()
         .rename(columns={'level_0':'date'}))

         date label     n
0  2016-01-01   bar  44.0
1  2016-01-01   foo  40.0
2  2016-01-02   bar  60.0
3  2016-01-02   foo  69.0
4  2016-01-03   bar  65.0
5  2016-01-03   foo  58.0
6  2016-01-04   bar  51.0
7  2016-01-04   foo  55.0
8  2016-01-05   bar  37.0
9  2016-01-05   foo  67.0
10 2016-01-06   bar  59.0
11 2016-01-06   foo  59.0
12 2016-01-07   foo   5.0
如果需要两列:

df1 = df.set_index('label', append=True).unstack(1).resample('1D').sum()
df1.columns = df1.columns.droplevel(0)
print (df1)
label        bar   foo
2016-01-01  61.0  65.0
2016-01-02  54.0  56.0
2016-01-03  70.0  53.0
2016-01-04  46.0  49.0
2016-01-05  61.0  49.0
2016-01-06  50.0  55.0
2016-01-07   NaN   6.0

我没想到能将
重采样
groupby
链接起来,非常强大。作为补充说明,我想出了第三种方法,使用TimeGrouper:
df.groupby([pd.TimeGrouper('W'),'label'])
df1 = df.set_index('label', append=True).unstack(1).resample('1D').sum()
df1.columns = df1.columns.droplevel(0)
print (df1)
label        bar   foo
2016-01-01  61.0  65.0
2016-01-02  54.0  56.0
2016-01-03  70.0  53.0
2016-01-04  46.0  49.0
2016-01-05  61.0  49.0
2016-01-06  50.0  55.0
2016-01-07   NaN   6.0