Python 熊猫如何进行分组比率计算
我有一个熊猫数据框,如下所示。当起始和目标组合的Python 熊猫如何进行分组比率计算,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个熊猫数据框,如下所示。当起始和目标组合的标志列的值等于Y时,我需要计算该列的成功率 输入 ORG DSTN FLAG LON SIN Y ADL SIN N SIN LON N LON SIN Y LON SIN N ADL SIN Y ADL SIN N SIN LON Y SIN LON Y SIN LON Y SIN LON N LON SIN N ORG
标志
列的值等于Y
时,我需要计算该列的成功率
输入
ORG DSTN FLAG
LON SIN Y
ADL SIN N
SIN LON N
LON SIN Y
LON SIN N
ADL SIN Y
ADL SIN N
SIN LON Y
SIN LON Y
SIN LON Y
SIN LON N
LON SIN N
ORG DSTN FLAG Ratio
LON SIN Y 0.5
ADL SIN N 0.3
SIN LON N 0.6
LON SIN Y 0.5
LON SIN N 0.5
ADL SIN Y 0.3
ADL SIN N 0.3
SIN LON Y 0.6
SIN LON Y 0.6
SIN LON Y 0.6
SIN LON N 0.6
LON SIN N 0.5
预期产出
ORG DSTN FLAG
LON SIN Y
ADL SIN N
SIN LON N
LON SIN Y
LON SIN N
ADL SIN Y
ADL SIN N
SIN LON Y
SIN LON Y
SIN LON Y
SIN LON N
LON SIN N
ORG DSTN FLAG Ratio
LON SIN Y 0.5
ADL SIN N 0.3
SIN LON N 0.6
LON SIN Y 0.5
LON SIN N 0.5
ADL SIN Y 0.3
ADL SIN N 0.3
SIN LON Y 0.6
SIN LON Y 0.6
SIN LON Y 0.6
SIN LON N 0.6
LON SIN N 0.5
如何在熊猫身上做到这一点 使用
值\u计数
和规格化=真
:
s = (df.groupby(['ORG', 'DSTN']).FLAG
.value_counts(normalize=True).rename('Ratio').reset_index()
)
然后将FLAG
等于N
的行更改为相应的Y
值,并合并:
s.loc[s.FLAG.eq('N'), 'Ratio'] = 1.0 - s.Ratio
df.merge(s, how='left')
你也可以分组,然后用
FLAG==“Y”
df.assign(Ratio=df.groupby(['ORG','DSTN']).FLAG.apply(lambda x:x.replace('Y|N',(x=='Y').mean(),regex=True)))
Out[174]:
ORG DSTN FLAG Ratio
0 LON SIN Y 0.500000
1 ADL SIN N 0.333333
2 SIN LON N 0.600000
3 LON SIN Y 0.500000
4 LON SIN N 0.500000
5 ADL SIN Y 0.333333
6 ADL SIN N 0.333333
7 SIN LON Y 0.600000
8 SIN LON Y 0.600000
9 SIN LON Y 0.600000
10 SIN LON N 0.600000
11 LON SIN N 0.500000
为什么
ADL SIN N
0.3??它是否应该是0.6
?有两个N
和一个Y
@Onyambu-its 1/3。一个Y和两个N。所以Y是1除以3,N是2/3吗??或者只需要1/3???@onyanbu,所有起点和终点的组合。我希望这个比例是Y的比例。