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'))