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

时间:2017-10-19 10:53:55

标签: python python-3.x anaconda

我想计算以下案例的比例。用于在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 个答案:

答案 0 :(得分:0)

不是单行,但

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

答案 1 :(得分:0)

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