私はアナコンダパンダ0.18.1を使用しています。私は pandas 12 でこれを行って、インデックス レベル 0 = 日付、およびインデックス レベル 1 = セキュリティ ID (毎日のデータの 3 年分) であるマルチインデックス データフレームでいくつかの値を遅延させました。
In [1]: testDB.head(2)
Out[1]:
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 2 entries, (2013-01-01, 000312) to (2013-01-01, 00036020)
Columns: 140 entries, in_universe to alpha_Tile
In[2]:
# lag a certain field:
#lag alphas
A_LAGS=[0,1,2,3,5,10,30,60,90]
grouped=testDB.groupby(level=1)['alpha']
for lag in A_LAGS:
lagName='lagA_'+str(int(lag))
testDB[lagName]=grouped.shift(periods=lag) # move old ones forward
現在、パンダ18では、これは決して終了しません。つまり、決して - 4 時間後です。パンダが日付を処理する方法に変更があったことを理解しているので、tshift を使用しようとしましたが、機能せず、「freq not set」について不平を言います。そうではありません (フレームは、日付、識別子、およびその他のデータを含む h5 ファイルから作成されます)。
In [3]: testDB.index.levels[0]
Out[3]: DatetimeIndex(['2016-01-01', '2016-01-04', '2016-01-05', '2016-01-06',
'2016-01-07', '2016-01-08', '2016-01-11', '2016-01-12',
'2016-01-13', '2016-01-14',
...
'2016-11-17', '2016-11-18', '2016-11-21', '2016-11-22',
'2016-11-23', '2016-11-24', '2016-11-25', '2016-11-28',
'2016-11-29', '2016-11-30'],
dtype='datetime64[ns]', name=u'date', length=239, freq=None)
そのため、適切な頻度を設定してインデックスを DateTimeIndex にリセットしようとしています。
In [4]: i = testDB.index.set_levels(
pd.DatetimeIndex(fullFrame.index.levels[0],freq='B'),
level=0)
i.levels[0]
Out[4]:
DatetimeIndex(['2016-01-01', '2016-01-04', '2016-01-05', '2016-01-06',
'2016-01-07', '2016-01-08', '2016-01-11', '2016-01-12',
'2016-01-13', '2016-01-14',
...
'2016-11-17', '2016-11-18', '2016-11-21', '2016-11-22',
'2016-11-23', '2016-11-24', '2016-11-25', '2016-11-28',
'2016-11-29', '2016-11-30'],
dtype='datetime64[ns]', name=u'date', length=239, freq='B')
これで頻度が設定されましたが、インデックスを置き換えることはできません:
In [5]:y = x.reindex(index=i,level=0)
y.index.levels[0]
Out[5]:
DatetimeIndex(['2016-01-01', '2016-01-04', '2016-01-05', '2016-01-06',
'2016-01-07', '2016-01-08', '2016-01-11', '2016-01-12',
'2016-01-13', '2016-01-14',
...
'2016-11-17', '2016-11-18', '2016-11-21', '2016-11-22',
'2016-11-23', '2016-11-24', '2016-11-25', '2016-11-28',
'2016-11-29', '2016-11-30'],
dtype='datetime64[ns]', name=u'date', length=239, freq=None)
最後に (前置きが長くなって申し訳ありません。完全なデータを提供したかったのです) 2 つの質問:
- Pandas 18 で大量のマルチインデックス フレームをシフトするにはどうすればよいですか?
- インデックスを新しく作成したインデックスにリセットできないのはなぜですか?