import pandas as pd
import string
from random import randint
months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
monthyAmounts = [ "actual", "budgeted", "difference" ]
summary = []
summary.append( [ randint( -1000, 15000 ) for x in range( 0, len( months ) * len( monthyAmounts ) ) ] )
summary.append( [ randint( -1000, 15000 ) for x in range( 0, len( months ) * len( monthyAmounts ) ) ] )
summary.append( [ randint( -1000, 15000 ) for x in range( 0, len( months ) * len( monthyAmounts ) ) ] )
index = pd.Index( [ 'Income', 'Expenses', 'Difference' ], name = 'type' )
columns = pd.MultiIndex.from_product( [months, monthyAmounts], names=['month', 'category'] )
summaryDF = pd.DataFrame( summary, index = index, columns = columns )
budgetMonths = pd.date_range( "January, 2018", periods = 12, freq = 'BM' )
idx = pd.IndexSlice
budgetDifference = summaryDF.loc[ 'Difference', idx[:, 'budgeted' ] ].cumsum()
budgetActual = summaryDF.loc[ 'Difference', idx[:, 'actual' ] ].cumsum()
Мне нужен фрейм данных, содержащий только фактические и бюджетные столбцы для строки Разница за месяц и дополнительный столбец, содержащий месяцы (в конечном итоге мне нужен этот дополнительный столбец для генерации графика)
ЕслиЯ делаю только:
budgetDifference = pd.DataFrame( { 'difference' : budgetDifference, 'months' : budgetMonths } )
В результате я получаю массив данных со столбцами разницы и месяца.
difference months
month category
Jan budgeted 1097 2018-01-31
Feb budgeted 11476 2018-02-28
Mar budgeted 11143 2018-03-30
Apr budgeted 25082 2018-04-30
May budgeted 28019 2018-05-31
Jun budgeted 37164 2018-06-29
Jul budgeted 36747 2018-07-31
Aug budgeted 44651 2018-08-31
Sep budgeted 54283 2018-09-28
Oct budgeted 62728 2018-10-31
Nov budgeted 76144 2018-11-30
Dec budgeted 77781 2018-12-31
Однако, когда я пытаюсь:
budgetDifference = pd.DataFrame( { 'difference' : budgetDifference, 'actual' : budgetActual, 'months' : budgetMonths } )
Я получаю:
ValueError: array length 12 does not match index length 24
и я не знаю почему.