2013-10-06 101 views
0

我有一个多重索引序列/数据帧,ID和时间戳记为关键字。此数据结构具有各种ID的每日数据。我可以使用resample函数来查看这个数据结构的月末快照吗?采样不同频率的熊猫数据帧

ID ts   value 
1 2001-01-30 1 
    2001-01-31 2 
    2001-02-01 3 
2 2001-01-30 3 
    2001-01-31 2 
    2001-02-01 4 

我想这个输出

ID ts   value 
1 2001-01-31 2 
2 2001-01-31 2 

我可以使用二次采样函数调用来帮助我吗?我知道我可以创建月份日期列表的末尾,并循环查看这些日期并找到这些值。但我想使用熊猫的全部功能。

回答

1

为什么你需要重新采样?就在指数设定为ts,然后切片,像这样:

from cStringIO import StringIO 
raw = """id ts  value 
1 2001-01-30 1 
1 2001-01-31 2 
1 2001-02-01 3 
2 2001-01-30 3 
2 2001-01-31 2 
2 2001-02-01 4""" 
sio = StringIO(raw) 
df = read_csv(sio, sep=r'\s+', header=0, parse_dates=[1]) 
df.set_index('ts', inplace=True) 

切片,然后重置指数:

print df['2001-01-31'].reset_index().set_index('id') 

导致:

    ts value 
id       
1 2001-01-31 00:00:00  2 
2 2001-01-31 00:00:00  2 

如果你不在乎如果不存在月末值,则可以这样做:

df.groupby('id', as_index=False).resample('M', how='last') 

哪给出

  id value 
ts     
2001-01-31 1  2 
2001-02-28 1  3 
2001-01-31 2  2 
2001-02-28 2  4