7

日時列とその他のキーの両方を含むマルチインデックスを使用して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'

リサンプリングはデータタイムインデックスでのみ許可されているため、他のインデックス列をアンスタックすると役立つと思いました。そして確かにそれはそうです、しかし私は後でそれを再び積み重ねることができません。

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

ただし、 「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')

インデックスエラーは、両方の列レベルを並べ替える(入れ替える)場合にも発生します。誰かがこの問題を克服する方法を知っていますか?

4

1 に答える 1

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
于 2013-03-25T17:34:55.583 に答える