我有一个数据帧:
AID Type Co-AID Co-Type
1 A 10 A
1 A 11 B
1 A 12 B
1 A 13 C
1 A 14 D
2 X 15 A
2 X 16 A
2 X 17 X
2 X 18 B
2 X 19 X
2 X 20 X
我想找到每种类型的 Co-Type 的百分比,
这些类型与其不同。所以结果将是
AID Type PercentDiff
1 A 0.8
2 X 0.5
0.8
是因为 4/5 的Co-Type
没有Type A
0.5
是因为 3/6 的Co-Type
没有Type X
我知道我可以根据Type
和Co-Type
对它们进行分组并获取每个计数,但是如何排除与之类似的类型?
你可以使用这个:
df.assign(PercentDiff=df['Type'].ne(df['Co-Type']))
.groupby(['AID','Type'])['PercentDiff'].mean().reset_index()
输出:
AID Type PercentDiff
0 1 A 0.8
1 2 X 0.5
计时
@Psidom方法
%%timeit
((df['Co-Type'] != df.Type)
.groupby([df.AID, df.Type])
.apply(lambda g: g.sum()/g.size)
.reset_index(name="PercentDiff"))
100 个环路,三选一:每环路 7.13 ms
此方法不带 lambda
%%timeit
(df.assign(PercentDiff=df['Type'].ne(df['Co-Type']))
.groupby(['AID','Type'])['PercentDiff'].mean().reset_index())
100 个循环,最佳 3 个:每个循环 4.42 ms
你可以这样做:
((df['Co-Type'] != df.Type)
.groupby([df.AID, df.Type])
.apply(lambda g: g.sum()/g.size)
.reset_index(name="PercentDiff"))
# AID Type PercentDiff
#0 1 A 0.8
#1 2 X 0.5