假設我有一個像這樣的支點:
import pandas as pd
d = {'Col_A': [1,2,3,3,3,4,9,9,10,11],
'Col_B': ['A','K','E','E','H','A','J','A','L','A'],
'Value1':[648,654,234,873,248,45,67,94,180,120],
'Value2':[180,120,35,654,789,34,567,21,235,83],
'Value3':[567,21,235,83,248,45,67,94,180,120]
}
df = pd.DataFrame(data=d)
df_pvt = pd.pivot_table(df,values=['Value1'], index='Col_A', columns='Col_B', aggfunc=np.sum).fillna(0)
df_pvt

我想使用“Value2/Value3”在樞軸的右側添加一個計算欄位。此計算欄位還應與 Col_B 類別一起顯示。一種方法是在樞軸中添加 Value2 和 Value3,然后進行除法。然后,我可以將那些 Value 2 和 Value 3 部分放在樞軸中。但是,我想知道是否有更簡單的方法來實作這一目標。我嘗試了以下方法,但沒有奏效:
pd.pivot_table(df,values=['Value1','Value2'/'Value3'], index='Col_A', columns=['Col_B','val2/val3'], aggfunc=np.sum).fillna(0)
uj5u.com熱心網友回復:
在樞軸之前應用這些轉換:
df = df.groupby(['Col_A', 'Col_B']).sum()
df = df.eval('V23 = Value2 / Value3')[['Value1', 'V23']]
然后應用樞軸和清理:
df.reset_index().pivot(index='Col_A', columns='Col_B').fillna(0)
更新:實際上,您可以將最后一行替換為:
df.unstack(fill_value=0)

uj5u.com熱心網友回復:
IIUC,assign之后使用:
out = df.pivot_table('Value1', 'Col_A', 'Col_B', aggfunc=np.sum).fillna(0) \
.assign(Value4=df.groupby('Col_A')
.apply(lambda x: sum(x['Value2']) / sum(x['Value3'])))
print(out)
# Output:
Col_B A E H J K L Value4
Col_A
1 648.0 0.0 0.0 0.0 0.0 0.0 0.317460
2 0.0 0.0 0.0 0.0 654.0 0.0 5.714286
3 0.0 1107.0 248.0 0.0 0.0 0.0 2.611307
4 45.0 0.0 0.0 0.0 0.0 0.0 0.755556
9 94.0 0.0 0.0 67.0 0.0 0.0 3.652174
10 0.0 0.0 0.0 0.0 0.0 180.0 1.305556
11 120.0 0.0 0.0 0.0 0.0 0.0 0.691667
uj5u.com熱心網友回復:
這是你要找的嗎?
df = pd.DataFrame(d)
df['Value2/Value3'] = df['Value2'] / df['Value3']
out = (pd.pivot_table(df, values=['Value1'], index='Col_A', columns='Col_B', aggfunc=np.sum).fillna(0)
.assign(**{'Value2/Value3':df.groupby('Col_A')['Value2/Value3'].sum()}))
輸出:
Value1 Value2/Value3
Col_B A E H J K L
Col_A
1 648.0 0.0 0.0 0.0 0.0 0.0 0.317460
2 0.0 0.0 0.0 0.0 654.0 0.0 5.714286
3 0.0 1107.0 248.0 0.0 0.0 0.0 11.209906
4 45.0 0.0 0.0 0.0 0.0 0.0 0.755556
9 94.0 0.0 0.0 67.0 0.0 0.0 8.686091
10 0.0 0.0 0.0 0.0 0.0 180.0 1.305556
11 120.0 0.0 0.0 0.0 0.0 0.0 0.691667
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376791.html
上一篇:VisualPython中的沖突
