2017-10-19 3 views
2

以下の場合の比率を計算したいと思います。 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で同じことを試してみました1行のコードで同じことをする。

Data$Y_flag_ratio = ave(Data$Flag == "Y", Data$Ord_ID) 
+0

あなたが同じのためにPythonで何かを試してみましたか? – chakri

+0

@ chakri、Pythonで最適なコード –

答えて

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の比率をしたい場合は、それはacuallyワンライナーすることができます。

>>> (df[df.Ord_ID == 291000002].Flag == 'Y').mean() 
0.375 
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 
関連する問題