如何在熊猫的分组依据函数中排除值



我有一个数据帧:

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

我知道我可以根据TypeCo-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

最新更新