我有一个我从数据框创建的数据透视表,索引是一个元组(["Warehouse", "Month"])
,但是当我运行时:
multi.index = pd.MultiIndex.from_tuples(pivoted.index)
我收到以下错误:
TypeError: Expected tuple, got 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)
答案 0 :(得分:0)
设置
时pivoted.loc['Column Total'] = pivoted.sum()
你的DataFrame来自像
这样的MultiIndexIn [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'])
索引dtype='object'
由前一个索引中的元组和新的'Column Total'
字符串组成。
In [3]: pivoted.loc['Column Total'] = pivoted.sum()
In [4]: pivoted
Out[4]:
CE CS DG DR IC IO
(01, 01) 9 4 6 5 6 6
(02, 02) 5 3 2 1 3 1
Column Total 14 7 8 6 9 7
In [5]: pivoted.index
Out[5]: Index([('01', '01'), ('02', '02'), 'Column Total'], dtype='object')
现在因为'Column Total'
显然是一个字符串而不是一个元组,所以应该清楚为什么会出现这个错误 - from_tuples
需要一个元组列表,而不是元组列表和一个字符串。
我不完全确定你想要的行为在这里或你在做什么,但我建议不在你的MultiIndex中添加列总和作为一行,除非你有一个很有道理的。如果您需要某些聚合的总和,您可以随时计算它们,或将它们存储在单独的系列中。
在任何情况下,您都可以添加一个总行(当然,只要您操作DataFrame就会失效)并保留您的MultiIndex,例如
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