重新采样多索引DataFrame

Rut*_*ies 7 python pandas

我想重新采样一个包含日期时间列和其他键的多索引的DataFrame.Dataframe看起来像:

import pandas as pd
from StringIO import StringIO

csv = StringIO("""ID,NAME,DATE,VAR1
1,a,03-JAN-2013,69
1,a,04-JAN-2013,77
1,a,05-JAN-2013,75
2,b,03-JAN-2013,69
2,b,04-JAN-2013,75
2,b,05-JAN-2013,72""")

df = pd.read_csv(csv, index_col=['DATE', 'ID'], parse_dates=['DATE'])
df.columns.name = 'Params'
Run Code Online (Sandbox Code Playgroud)

因为重新采样只允许在数据时间索引上,所以我认为取消堆叠其他索引列会有所帮助.事实确实如此,但事后再也无法再叠加了.

print df.unstack('ID').resample('W-THU')

Params      VAR1      
ID               1     2
DATE                    
2013-01-03      69  69.0
2013-01-10      76  73.5
Run Code Online (Sandbox Code Playgroud)

但是再次堆叠 'ID'会导致索引错误:

print df.unstack('ID').resample('W-THU').stack('ID')

IndexError: index 0 is out of bounds for axis 0 with size 0
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我可以将两个列级别堆叠起来:

print df.unstack('ID').resample('W-THU').stack(0)
Run Code Online (Sandbox Code Playgroud)

print df.unstack('ID').resample('W-THU').stack('Params')
Run Code Online (Sandbox Code Playgroud)

如果我重新排序(交换)两个列级别,也会发生索引错误.有谁知道如何克服这个问题?

use*_*356 8

该示例取消堆叠非数字列"NAME",该列静默删除但在重新堆叠期间会导致问题.下面的代码对我有用

print df[['VAR1']].unstack('ID').resample('W-THU').stack('ID')
Params         VAR1
DATE       ID
2013-01-03 A   69.0
           B   69.0
2013-01-10 A   76.0
           B   73.5
Run Code Online (Sandbox Code Playgroud)