我希望resample a 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'
因为重新采样只允许在数据时间索引上,我认为unstacking其他索引列会有所帮助。事实确实如此,但事后再也无法再叠加了。
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
但是stacking'ID'再次导致索引错误:
print df.unstack('ID').resample('W-THU').stack('ID')
IndexError: index 0 is out of bounds for axis 0 with size 0
奇怪的是,我可以将两个列级别堆叠起来:
print df.unstack('ID').resample('W-THU').stack(0)
和
print df.unstack('ID').resample('W-THU').stack('Params')
如果我重新排序(交换)两个列级别,也会发生索引错误。有谁知道如何克服这个问题?
答案 0 :(得分: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