Я создаю свой фрейм данных, выполняя следующие действия:
months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
monthyAmounts = [ "actual", "budgeted", "difference" ]
income = []
names = []
for x in range( incomeIndex + 1, expensesIndex ):
amounts = [ randint( -1000, 15000 ) for x in range( 0, len( months ) * len( monthyAmounts ) ) ]
income.append( amounts )
names.append( f"name_{x}" )
index = pd.Index( names, name = 'category' )
columns = pd.MultiIndex.from_product( [ months, monthyAmounts ], names = [ 'month', 'type' ] )
incomeDF = pd.DataFrame( income, index = index, columns = columns )
Фрейм данных выглядит так:
(удалены месяцы март - декабрь)
Jan Feb ...
actual budgeted difference actual budgeted difference
name_13 14593 -260 10165 9767 629 10054
name_14 6178 1398 13620 1821 10986 -663
name_15 2432 3279 7545 8196 1052 7386
name_16 9964 13098 10342 5564 4631 7422
Я хочу, чтобы в каждой строке был вырезан столбец разницы за месяцы январь-май. Что я могу сделать, это нарезать столбец разницы за все месяцы, выполнив:
incomeDifferenceDF = incomeDF.loc[ :, idx[ :, 'difference' ] ]
, который дает мне фрейм данных, который выглядит следующим образом:
(месяцы март - декабрь удалены)
Jan Feb ....
difference difference
name_13 10165 10054
name_14 13620 -663
name_15 7545 7386
name_16 10342 7422
То, что я пробовал, это:
incomeDifferenceDF = incomeDF.loc[ :, idx[ 'Jan' : 'May', 'difference' ] ]
но это дает мне ошибку:
UnsortedIndexError: 'MultiIndex slicing requires the index to be lexsorted: slicing on levels [0], lexsort depth 0'
Итак, это кажется близким, но я не уверен, как решить проблему.
Я также пробовал:
incomeDifferenceDF = incomeDF.loc[ :, idx[ ['Jan':'May'], 'difference' ] ]
Но это просто выдает ошибку:
SyntaxError: invalid syntax
( Points at ['Jan':'May'] )
Каков наилучший способ сделать это?