Python Pandas:有效地为切片赋值



我有一个数据帧next_train,其中包含许多玩家的每周数据(在 4 周内观察了 80,000 名玩家,总共观察了 320,000 次(和一个字典players,其中包含某些玩家的二进制变量(例如 10,000(。我想将此二进制变量添加到数据帧next_train(如果播放器不在字典中players,我将变量设置为零(。这就是我的做法:

next_train = pd.read_csv()
# ... calculate dictionary 'players' ...
next_train['variable'] = 0
for player in players:
next_train.loc[next_train['id_of_player'] == player, 'variable'] = players[player]

然而,for循环需要很长时间才能完成,我不明白为什么。看起来任务是对数据帧中player的值执行二叉搜索 10,000 次(players字典的大小(,但执行时间为几分钟。有没有有效的方法来完成这项任务?

你应该使用map而不是切片,这样会更快:

next_train['variable'] = next_train.id_of_player.map(players)

如果您希望其他行为 0,因此可以使用fillna

next_train.variable.fillna(0,inplace = True)

此外,如果您的字典仅包含布尔值,则可能需要重新定义variable列的类型以占用更少的空间。所以你以这段代码结束:

next_train['variable'] = next_train.id_of_player.map(players).fillna(0).astype(int)

使用mapfillna

next_train['variable'] = next_train['id_of_player'].map(players).fillna(0)

这将通过在玩家 ID 上应用字典来创建一个新列,然后用 0 填充所有空值。

最新更新