Python 按组计算正值的比率

Python 按组计算正值的比率,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我正在使用具有以下结构的熊猫数据帧: import pandas as pd ​ df = pd.DataFrame({'brand' : ['A', 'A', 'B', 'B', 'C', 'C'], 'target' : [0, 1, 0, 1, 0, 1], 'freq' : [5600, 220, 5700, 90, 5000, 100]}) ​ print(df) brand target freq

我正在使用具有以下结构的熊猫数据帧:

import pandas as pd
​
df = pd.DataFrame({'brand' : ['A', 'A', 'B', 'B', 'C', 'C'], 
                   'target' : [0, 1, 0, 1, 0, 1], 
                   'freq' : [5600, 220, 5700, 90, 5000, 100]})
​
print(df)
  brand  target  freq
0     A       0  5600
1     A       1   220
2     B       0  5700
3     B       1    90
4     C       0  5000
5     C       1   100
对于每个品牌,我想计算积极目标的比率,例如,对于品牌A,积极目标的百分比为220/(220+5600)=0.0378

生成的数据帧应如下所示:

  brand  target  freq   ratio
0     A       0  5600  0.0378
1     A       1   220  0.0378
2     B       0  5700  0.0156
3     B       1    90  0.0156
4     C       0  5000  0.0196
5     C       1   100  0.0196

我知道我应该按品牌对数据帧进行分组,然后对每个组应用一些函数(因为我想保留最终结果中的所有行,所以我认为我应该在这里使用transform)。我测试了一些东西,但没有成功。感谢您的帮助

首先按
brand
target
对每组最后一行
1
的列进行排序,然后使用lambda函数进行划分:

df = df.sort_values(['brand','target'])
df['ratio'] = df.groupby('brand')['freq'].transform(lambda x: x.iat[-1] / x.sum())
print (df)
  brand  target  freq     ratio
0     A       0  5600  0.037801
1     A       1   220  0.037801
2     B       0  5700  0.015544
3     B       1    90  0.015544
4     C       0  5000  0.019608
5     C       1   100  0.019608
或划分由函数和创建的序列:

df = df.sort_values(['brand','target'])
g = df.groupby('brand')['freq']
df['ratio'] = g.transform('last').div(g.transform('sum'))