Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 来自透视元组索引的多索引_Python_Pandas_Pivot Table - Fatal编程技术网

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