大熊猫除以价值而没有给出正确的结果

时间:2017-03-09 20:52:38

标签: python pandas

我有一个pandas数据框'pivoted':

Reason                CE CS DG DR IC  IO    
Warehouse Month                                                                
01        01           9  4  4  0  1   8  

我还有一个可以累积问题总数的变量。它是一个“int”类型变量。在这种情况下,它是626

当我运行以下行时:total_percentages = pivoted/total_issues

我没有得到正确的(或预期的)结果:

01        01     0.021143  0.009397  0.009397  0.000000  0.002349  0.018793

我希望如此:

01        01     0.014376  0.006389 0.006389  0.00000   0.001597  0.012780  

我的完整代码:

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)

pivoted.loc['Column Total'] = pivoted.sum()
print(pivoted.dtypes)

#Percentages of Warehouse Returns by Month
warehouse_percentages = pivoted[:] = 100 * pivoted[:].div(pivoted[:].sum(axis=1), axis=0)
print(warehouse_percentages)
print(total_issues)
total_percentages = pivoted.div(total_issues)`

1 个答案:

答案 0 :(得分:2)

使用

warehouse_percentages = pivoted[:] = 100 * pivoted[:].div(pivoted[:].sum(axis=1), axis=0)

您正在重新分配pivoted的所有值作为操作右侧的结果,这就是为什么您的预期输出与您打印pivoted的内容不匹配的原因在上面的行之前。

因此,如果您在使用此操作修改pivoted打算,请删除pivoted[:] - 我不确定您是否认为没有副本'' ll修改pivoted但是没有必要 - Pandas操作几乎总是默认不操作,但返回另一个对象。

warehouse_percentages = 100* pivoted.div(pivoted.sum(axis=1), axis=0)