Python 透视 Table 列中的多个小计
Python Pivot Table multi Sub-totals in column
我希望能够以不同的方式显示来自多索引数据透视表 table 的小计列,例如,我想显示所选行的总和以及另一个,这可能吗?
我设法获得了一半的代码正确,但我一直在复制代码而不抵消前一个代码,我无法循环此代码。
在我的示例中,我想获得 Toyota 的最大值和 Honda 的总和值,显示在新创建的 Total 列中。
cars = {'Brand': ['Honda','Toyota', 'Honda','Toyota'],
'Target': ['A','B', 'A','B'],
'Speed': [20, 80, 30 , 10],
'Date' : ['13/02/2019', '18/02/2019', '18/02/2019', '13/02/2019']
}
df = pd.DataFrame(cars)
table = pd.pivot_table(df, values=['Speed'],
index=['Target', 'Brand'],
columns=['Date'],
fill_value=0, aggfunc=np.sum, dropna=True)
table
创建的代码:(仅适用于最后一行,因为它会覆盖第一行)
table['Total'] = table.loc(axis=0)[:, ['Toyota']].max(axis=1)
table['Total'] = table.loc(axis=0)[:, ['Honda']].sum(axis=1)
当前输出:
期望的输出:
我还希望能够看到丰田的最大值,即 80。
使用slicers
在两侧设置新值,此处:
表示级别的所有值:
idx = pd.IndexSlice
table.loc[idx[:, 'Toyota'], 'Total'] = table.max(axis=1)
table.loc[idx[:, 'Honda'], 'Total'] = table.sum(axis=1)
print (table)
Speed Total
Date 13/02/2019 18/02/2019
Target Brand
A Honda 20 30 50.0
B Toyota 10 80 80.0
两边都可以设置和select:
idx = pd.IndexSlice
table.loc[idx[:, 'Toyota'], 'Total'] = table.loc[idx[:, 'Toyota'], :].max(axis=1)
table.loc[idx[:, 'Honda'], 'Total'] = table.loc[idx[:, 'Honda'], :].sum(axis=1)
我希望能够以不同的方式显示来自多索引数据透视表 table 的小计列,例如,我想显示所选行的总和以及另一个,这可能吗?
我设法获得了一半的代码正确,但我一直在复制代码而不抵消前一个代码,我无法循环此代码。
在我的示例中,我想获得 Toyota 的最大值和 Honda 的总和值,显示在新创建的 Total 列中。
cars = {'Brand': ['Honda','Toyota', 'Honda','Toyota'],
'Target': ['A','B', 'A','B'],
'Speed': [20, 80, 30 , 10],
'Date' : ['13/02/2019', '18/02/2019', '18/02/2019', '13/02/2019']
}
df = pd.DataFrame(cars)
table = pd.pivot_table(df, values=['Speed'],
index=['Target', 'Brand'],
columns=['Date'],
fill_value=0, aggfunc=np.sum, dropna=True)
table
创建的代码:(仅适用于最后一行,因为它会覆盖第一行)
table['Total'] = table.loc(axis=0)[:, ['Toyota']].max(axis=1)
table['Total'] = table.loc(axis=0)[:, ['Honda']].sum(axis=1)
当前输出:
期望的输出:
我还希望能够看到丰田的最大值,即 80。
使用slicers
在两侧设置新值,此处:
表示级别的所有值:
idx = pd.IndexSlice
table.loc[idx[:, 'Toyota'], 'Total'] = table.max(axis=1)
table.loc[idx[:, 'Honda'], 'Total'] = table.sum(axis=1)
print (table)
Speed Total
Date 13/02/2019 18/02/2019
Target Brand
A Honda 20 30 50.0
B Toyota 10 80 80.0
两边都可以设置和select:
idx = pd.IndexSlice
table.loc[idx[:, 'Toyota'], 'Total'] = table.loc[idx[:, 'Toyota'], :].max(axis=1)
table.loc[idx[:, 'Honda'], 'Total'] = table.loc[idx[:, 'Honda'], :].sum(axis=1)