Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫如何进行分组比率计算_Python_Python 3.x_Pandas - Fatal编程技术网

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的比例。