在Python中查找按比例的因素?

问题描述:

我想计算下列情况的比例。任何用于在Python中执行以下方案的最佳代码。我在Python无法弄清楚,但能够做相同的R.在Python中查找按比例的因素?

输入

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) 
+0

你尝试过在python什么的一样吗? – chakri

+0

@ chakri,python中的任何最佳代码 –

不是一个衬垫,但

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的比例,那么它acually可以是一个班轮。

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

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