Python 来自透视元组索引的多索引
我有一个从数据帧创建的数据透视表,索引是一个元组Python 来自透视元组索引的多索引,python,pandas,pivot-table,Python,Pandas,Pivot Table,我有一个从数据帧创建的数据透视表,索引是一个元组([“仓库”,“月份]),但是当我运行时: multi.index=pd.MultiIndex.from_元组(pivoted.index) 我收到以下错误: TypeError:需要元组,得到str 完整代码如下: hedrows = cursor.fetchall() for row in hedrows : total_issues = total_issues + 1 issue_df = pd.read_sql(issue_que
([“仓库”,“月份])
,但是当我运行时:
multi.index=pd.MultiIndex.from_元组(pivoted.index)
我收到以下错误:
TypeError:需要元组,得到str
完整代码如下:
hedrows = cursor.fetchall()
for row in hedrows :
total_issues = total_issues + 1
issue_df = pd.read_sql(issue_query, cnxn)
issue_df.rename(columns={'00001' : 'Invoices', 'OBWHID' : 'Warehouse', 'OBRTRC':'Reason', 'INV_MONTH':'Month', '00005':'Date'}, inplace=True)
pivoted = pd.pivot_table(issue_df, index=["Warehouse", "Month"], values=["Invoices"], columns=['Reason'], aggfunc='count', fill_value=0)
warehouse_percentages=pivoted
total_percentages=pivoted
warehouse_percentages=pivoted
total_percentages=pivoted
#Percentages of Warehouse Returns by Month
warehouse_percentages = 100 * warehouse_percentages[:].div(warehouse_percentages[:].sum(axis=1), axis=0)
pivoted.loc['Column Total'] = pivoted.sum()
#Percentages of Total Returns by Month
total_percentages = total_percentages.div(total_issues)
multi.index = pd.MultiIndex.from_tuples(pivoted.index)
当你设定
pivoted.loc['Column Total'] = pivoted.sum()
您的数据帧从具有多索引开始,类似于
In [1]: pivoted
CE CS DG DR IC IO
Warehouse Month
01 01 9 4 6 5 6 6
02 02 5 3 2 1 3 1
In [2]: pivoted.index
Out[2]:
MultiIndex(levels=[['01', '02'], ['01', '02']],
labels=[[0, 1], [0, 1]],
names=['Warehouse', 'Month'])
In [6]: df.loc[('Total', 'Total'), :] = df.sum()
In [7]: df
Out[7]:
CE CS DG DR IC IO
Warehouse Month
01 01 9.0 4.0 6.0 5.0 6.0 6.0
02 02 5.0 3.0 2.0 1.0 3.0 1.0
Total Total 14.0 7.0 8.0 6.0 9.0 7.0
既然'Column Total'
显然是一个字符串而不是一个元组,那么应该很清楚为什么会出现这个错误-需要一个元组列表,而不是元组列表和字符串
我不完全确定您想要的行为是什么,或者您正在做什么,但是我可能会建议不要将列和作为行添加到多重索引中,除非您有充分的理由这样做。如果您需要某些聚合的总和,则始终可以在该时间点计算它们,或者将它们存储在单独的序列中
在任何情况下,您都可以添加一个总计行(当然,只要您操作数据帧,该行就会失效),并使用以下内容保留多重索引
In [1]: pivoted
CE CS DG DR IC IO
Warehouse Month
01 01 9 4 6 5 6 6
02 02 5 3 2 1 3 1
In [2]: pivoted.index
Out[2]:
MultiIndex(levels=[['01', '02'], ['01', '02']],
labels=[[0, 1], [0, 1]],
names=['Warehouse', 'Month'])
In [6]: df.loc[('Total', 'Total'), :] = df.sum()
In [7]: df
Out[7]:
CE CS DG DR IC IO
Warehouse Month
01 01 9.0 4.0 6.0 5.0 6.0 6.0
02 02 5.0 3.0 2.0 1.0 3.0 1.0
Total Total 14.0 7.0 8.0 6.0 9.0 7.0
当你设定
pivoted.loc['Column Total'] = pivoted.sum()
您的数据帧从具有多索引开始,类似于
In [1]: pivoted
CE CS DG DR IC IO
Warehouse Month
01 01 9 4 6 5 6 6
02 02 5 3 2 1 3 1
In [2]: pivoted.index
Out[2]:
MultiIndex(levels=[['01', '02'], ['01', '02']],
labels=[[0, 1], [0, 1]],
names=['Warehouse', 'Month'])
In [6]: df.loc[('Total', 'Total'), :] = df.sum()
In [7]: df
Out[7]:
CE CS DG DR IC IO
Warehouse Month
01 01 9.0 4.0 6.0 5.0 6.0 6.0
02 02 5.0 3.0 2.0 1.0 3.0 1.0
Total Total 14.0 7.0 8.0 6.0 9.0 7.0
既然'Column Total'
显然是一个字符串而不是一个元组,那么应该很清楚为什么会出现这个错误-需要一个元组列表,而不是元组列表和字符串
我不完全确定您想要的行为是什么,或者您正在做什么,但是我可能会建议不要将列和作为行添加到多重索引中,除非您有充分的理由这样做。如果您需要某些聚合的总和,则始终可以在该时间点计算它们,或者将它们存储在单独的序列中
在任何情况下,您都可以添加一个总计行(当然,只要您操作数据帧,该行就会失效),并使用以下内容保留多重索引
In [1]: pivoted
CE CS DG DR IC IO
Warehouse Month
01 01 9 4 6 5 6 6
02 02 5 3 2 1 3 1
In [2]: pivoted.index
Out[2]:
MultiIndex(levels=[['01', '02'], ['01', '02']],
labels=[[0, 1], [0, 1]],
names=['Warehouse', 'Month'])
In [6]: df.loc[('Total', 'Total'), :] = df.sum()
In [7]: df
Out[7]:
CE CS DG DR IC IO
Warehouse Month
01 01 9.0 4.0 6.0 5.0 6.0 6.0
02 02 5.0 3.0 2.0 1.0 3.0 1.0
Total Total 14.0 7.0 8.0 6.0 9.0 7.0