Python 在多索引数据帧的两个级别对日期进行重采样
我有一个带有2级多索引的熊猫数据帧。多索引的两个级别都是相同的日期范围,每天间隔一次。我想每周对多索引的两个级别的数据帧重新采样,但我遇到了麻烦。请看下面 举个例子,让我们将每个索引追溯到2周前:Python 在多索引数据帧的两个级别对日期进行重采样,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我有一个带有2级多索引的熊猫数据帧。多索引的两个级别都是相同的日期范围,每天间隔一次。我想每周对多索引的两个级别的数据帧重新采样,但我遇到了麻烦。请看下面 举个例子,让我们将每个索引追溯到2周前: d0 = date.today() - timedelta(days=14) dates = pd.date_range(d0, date.today()) date_index = pd.MultiIndex.from_product([dates, dates], names=['cohort_d
d0 = date.today() - timedelta(days=14)
dates = pd.date_range(d0, date.today())
date_index = pd.MultiIndex.from_product([dates, dates], names=['cohort_date', 'event_date'])
df = pd.DataFrame(np.random.randint(0, 100, 225), index=date_index)
如果我直接对df重新采样,我会得到以下TypeError:
df.resample('W', how='sum')
[...]
TypeError: Only valid with DatetimeIndex or PeriodIndex
公平地说,我在第一个层次上展开并重新采样,这给出了我一半的答案:
df2 = df.unstack().resample('W', how='sum').T
print df2
cohort_date 2014-07-20 2014-07-27 2014-08-03
event_date
0 2014-07-16 177 424 115
2014-07-17 408 392 197
2014-07-18 174 435 222
2014-07-19 180 392 141
2014-07-20 304 252 155
2014-07-21 242 236 228
2014-07-22 139 159 77
2014-07-23 117 293 68
2014-07-24 308 353 246
2014-07-25 254 471 160
2014-07-26 258 240 144
2014-07-27 297 360 148
2014-07-28 284 303 202
2014-07-29 218 399 144
2014-07-30 227 286 160
现在,如果我尝试对第二个轴重新采样(理论上也是按日期索引),我会得到相同的错误:
df2.unstack().resample('W', how='sum')
[...]
TypeError: Only valid with DatetimeIndex or PeriodIndex
我现在不知所措,如果能在每个维度上按周重新采样,我将不胜感激。这需要0.14.1(它也可能在0.14.0中工作)
注:我认为他们的问题很小,因为这应该通过指定级别(而不是重置并将其用作列)来实现
文件是
谢谢杰夫,这正是我想要的!关于你的“应该工作”评论,你是指我的第一次或第二次重采样尝试吗?不,我的意思是
df.groupby([pd.Grouper(level='court\u date',freq='W'),…]).sum()
应该工作(这是一个bug,请看这里:哦,好的,谢谢!我想知道为什么需要重置索引()?如果我去掉它,我会得到“Grouper name court\u date”.这是错误的自动取款机。将被修复为0.15.0。太棒了,谢谢!我喜欢这样,因为像你这样的人:)
In [22]: df.reset_index().groupby([pd.Grouper(key='cohort_date',freq='W'),pd.Grouper(key='event_date',freq='W')]).sum()
Out[22]:
0
cohort_date event_date
2014-07-20 2014-07-20 1292
2014-07-27 1665
2014-08-03 764
2014-07-27 2014-07-20 1521
2014-07-27 2317
2014-08-03 1071
2014-08-03 2014-07-20 871
2014-07-27 1006
2014-08-03 306