Python 向DataFrame添加新列,列数的百分比取决于状态

Python 向DataFrame添加新列,列数的百分比取决于状态,python,pandas,dataframe,pivot,Python,Pandas,Dataframe,Pivot,这是我的数据帧 df = pd.DataFrame({'Date' : ['2020-08-20','2020-08-20','2020-08-20','2020-08-20','2020-08-20','2020-08-20'], 'Product' : ['A','B','C','A','B','C'], 'Amount' : [500,500, 700, 500,200,300], 'Status' : [1,1,1,0,0,0]}) 我的目标是得到每天每个州每种产品的百分比。所以当我使

这是我的数据帧

df = pd.DataFrame({'Date' : ['2020-08-20','2020-08-20','2020-08-20','2020-08-20','2020-08-20','2020-08-20'], 'Product' : ['A','B','C','A','B','C'], 'Amount' : [500,500, 700, 500,200,300], 'Status' : [1,1,1,0,0,0]})
我的目标是得到每天每个州每种产品的百分比。所以当我使用

df1 = pd.pivot_table(df, values='Amount', index=['Date', 'Status'],
                columns=['Product'], aggfunc=np.sum, fill_value=0)
我得到的数据帧如下所示:

如何添加三个新列,以便为每个产品计算每个状态的百分比份额?因此,新列['A带0']应为0.5,对于[B'带0']0.29,对于['C带0']0.3。

与新的
数据帧一起使用
由带
总和
值的分割聚合创建,以避免重复的列名称:

df1 = df1.join(df1.div(df1.groupby(level=0).sum(), level=0).add_prefix('pct_'))

#alternative
#df1 = df1.join(df1.div(df1.sum(level=0), level=0).add_prefix('pct_'))
print (df1)
Product              A    B    C  pct_A     pct_B  pct_C
Date       Status                                       
2020-08-20 0       500  200  300    0.5  0.285714    0.3
           1       500  500  700    0.5  0.714286    0.7
编辑:对于选择依据
状态=0
第二级使用:

print (df1.xs(0, axis=0, level=1))
Product       A    B    C  pct_A     pct_B  pct_C
Date                                             
2020-08-20  500  200  300    0.5  0.285714    0.3

好啊是否可以只显示每个日期的状态0?您的解决方案只适用于一个日期。在我的数据框中,我有很多日期。所以我需要的是每天的百分比。当我输入您的代码时,它会计算所有天内每种产品的金额。对不起,我的代码里忘了这个。