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 不同。
我想你需要 sum
个 boolean 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)
我需要计算数据帧中不同变量出现的次数。 这是数据的表示形式:
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 不同。
我想你需要 sum
个 boolean 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)