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