1

我有一个以 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

我可以使用 resample 函数调用来帮助我吗?我知道我可以创建月末日期列表并遍历这些日期并找到这些值。但我想使用熊猫的全部功能。

4

1 回答 1

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
于 2013-10-06T23:06:24.337 回答