我有一个多索引系列/数据帧,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
我可以使用重新采样函数调用来帮助我吗?我知道我可以创建月末日期列表并循环查看这些日期并找到这些值。但我想使用熊猫的全部功能。
答案 0 :(得分: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