在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)
答
不是一个衬垫,但
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
你尝试过在python什么的一样吗? – chakri
@ chakri,python中的任何最佳代码 –