Python 可扩展条件计数

Python Expandable Conditional Count

我需要计算数据帧中不同变量出现的次数。 这是数据的表示形式:

df = pd.DataFrame({'game_id': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2], 
                   'event_num': list(range (0,10)), 
                   'event_cd': np.random.randint(25, size = 10)})

输出:

   event_cd  event_num  game_id
0        20          0        1
1         0          1        1
2        15          2        1
3         8          3        1
4        10          4        1
5        18          5        2
6        22          6        2
7         7          7        2
8         7          8        2
9        23          9        2

假设我有一个公式:

some_stat = (count(event_cd = 10) + count(event_cd = 14)) / count(event_cd = 2)

最有效的方法是什么?实际数据确实包含 24 个不同的 event_cd,并且包含大约 50,000 行。如果可能的话,计数也需要对应于 game_id,因此游戏 1 的计数将与游戏 2 不同。

我想你需要 sumboolean mask:

some_stat = ((df.event_cd == 10).sum() + (df.event_cd == 14).sum()) /
             (df.event_cd == 2).sum()

print (some_stat)

如果还想按组计数,请使用 groupby 和自定义函数:

def f(x):
    return ((x == 10).sum() + (x == 14).sum()) / (x == 2).sum()

df = df.groupby('game_id')['event_cd'].apply(f)
print (df)