Я использовал answer to this question, чтобы попытаться сделать подобный фрагмент на моей информационной кадре. Но это не работает, потому что индекс строки - это TimeSeries. Я не уверен, как перефразировать срез для работы.Нарезка MultiIndex с индексом строки Timeseries
df Я использую один индекс TimeSeries, а столбцы - двухуровневый MultiIndex. Я пытаюсь, для произвольной строки, возвращать серию, состоящую из подколонки «px» каждого основного столбца.
Первая попытка: df.loc[0,(slice(None), 'px')]
бросает TypeError,
TypeError: cannot do index indexing on <class 'pandas.tseries.index.DatetimeIndex'> with these indexers [0] of <type 'int'>
Так я и пытался кормить его DateTime для индекса, вместо междунар:
useIndex = sdf.index[0]
return df.loc[useIndex,(slice(None), 'px')]
Что дает a:
KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)'
Постскриптум ...
Если я просто делаю простой,
useIndex = sdf.index [0] useIndex sdf.iloc [useIndex]
Я получаю отказ:
TypeError: cannot do label indexing on <class 'pandas.tseries.index.DatetimeIndex'> with these indexers [2015-10-08 00:00:00] of <class 'pandas.tslib.Timestamp'>
Итак, может быть, проблема в том, что я не передаю действительный указатель на фрагмент MultiIndex?
================
Вот два примера: первый ДФ («ДФ») Я в состоянии вытащить данные, которые я хочу. Второй df ('df2') выдает ошибку типа.
import pandas as pd
import numpy as np
cols = [['col_1', 'col_2'], ['delta', 'px']]
multi_idx = pd.MultiIndex.from_product(cols, names= ["level_0", "level_1"])
df = pd.DataFrame(np.random.rand(20).reshape(5, 4), index=range(5), columns=multi_idx)
row_number =1
print df.loc[df.index[row_number], pd.IndexSlice[:, 'px']]
rng = pd.date_range('1/1/2011', periods=5, freq='H')
df2 = pd.DataFrame(np.random.rand(20).reshape(5, 4), index=rng, columns=multi_idx)
#print df2.loc[df.index[row_number], pd.IndexSlice[:, 'px']]
useIndex = df2.index[0]
print df2.loc[useIndex, pd.IndexSlice[:, 'px']]
Вместо того чтобы помещать изображение в вашу фреймворк данных, вы должны непосредственно скопировать/вставить данные в рамку. Это упростит другим пользователям копирование данных и использование 'pd.read_clipboard()', чтобы воспроизвести вашу проблему и протестировать ее. –
Ананд S Кумар. Я «скопировал и вставил» фрагмент блока данных, но он просто заканчивается как тарабарщина в окне stackoverflow. – user3556757
После копирования вы должны использовать значок '{}', чтобы превратить его в блок кода, так что он не станет тарабарщиной. –