在Python中查找按因子分组的比率?

2021-09-27 06:43:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算下列情况的比率。任何在Python中实现以下场景的最佳代码。我不能在Python中理解,但在R中也可以这样做

输入

Ord_ID  Flag
48221742    Y
48221742    Y
48221742    Y
48221742    Y
48221742    N
48221742    N
48221742    Y
48221742    N
48221742    N
48221742    N
291000002   N
291000002   Y
291000002   Y
291000002   Y
291000002   N
291000002   N
291000002   N
291000002   N

输出

Ord_ID  Flag    Y_Flag_Ratio
48221742    Y   0.5
48221742    Y   0.5
48221742    Y   0.5
48221742    Y   0.5
48221742    N   0.5
48221742    N   0.5
48221742    Y   0.5
48221742    N   0.5
48221742    N   0.5
48221742    N   0.5
291000002   N   0.375
291000002   Y   0.375
291000002   Y   0.375
291000002   Y   0.375
291000002   N   0.375
291000002   N   0.375
291000002   N   0.375
291000002   N   0.375

我在R中也试过同样的方法,我能在一行代码中做同样的事情。你知道吗

Data$Y_flag_ratio = ave(Data$Flag == "Y", Data$Ord_ID)
2条回答
网友
1楼 ·
Ord_ID_total=data.groupby(['Ord_ID']).agg({'Ord_ID': 'count'})
Ord_ID_Y=data[data['Flag'] == 'Y'].groupby(['Ord_ID']).agg({'Ord_ID': 'count'})

def computeFlag(Ord_ID):
    Y_Flag_Ratio=0

    try:
        Y_Flag_Ratio=Ord_ID_Y.Ord_ID[Ord_ID]/Ord_ID_total.Ord_ID[Ord_ID]
    except:
        pass
网友
2楼 ·

不是一行,而是

ratio = (
    df[df.Flag == 'Y'].groupby(['Ord_ID']).count() /
    df.groupby(['Ord_ID']).count()
).rename(columns={'Flag': 'Y_Flag_Ratio'})

print(pd.concat([df, ratio], axis=1))

如果您只需要给定id的一个比率,那么它实际上可以是一行。你知道吗

>>> (df[df.Ord_ID == 291000002].Flag == 'Y').mean()
0.375

相关问题