提问者:小点点

获取使用datetime索引的数据帧中的首次出现


我有一个数据框,代表玩家在游戏中的得分,按时间索引:

             player_id
2016-03-01   873970260
2016-03-02  8470693237
2016-03-02   221785899
2016-03-03   569452661
2016-03-04   221785899
2016-03-04  8276343674

我想添加一个新的列,其中包含一个布尔值,表示player\u id是否在时间序列中第一次出现:

             player_id  new_player
day
2016-03-01   873970260        True
2016-03-02  8470693237        True
2016-03-02   221785899        True
2016-03-03   569452661        True
2016-03-04   221785899       False
2016-03-04  8276343674        True

True表示“以前从未见过”,False表示“过去已经得分”。

最快的方法是什么?在切片上使用isin(即比较dataframe[day]dataframe[: day-1])?

以下是我如何构建示例数据框架:

import pandas as pd
import datetime as dt

gamedf = pd.DataFrame([873970260,8470693237,221785899,569452661,221785899,8276343674],
    columns=['player_id'],
    index=[dt.datetime(2016, 3, 1), dt.datetime(2016, 3, 2), dt.datetime(2016, 3, 2), dt.datetime(2016, 3, 3), dt.datetime(2016, 3, 4), dt.datetime(2016, 3, 4)])

共1个答案

匿名用户

使用duplicated创建一系列重复的布尔值,并使用~反转:

In [72]:
df['new_player'] = ~df['player_id'].duplicated()
df

Out[72]:
             player_id new_player
day                              
2016-03-01   873970260       True
2016-03-02  8470693237       True
2016-03-02   221785899       True
2016-03-03   873970260      False
2016-03-03   423970290       True
2016-03-04   221785899      False
2016-03-04  8276343674       True

使用您的gamedf代码:

In [74]:
gamedf['new_player'] = ~gamedf['player_id'].duplicated()
gamedf

Out[74]:
             player_id new_player
2016-03-01   873970260       True
2016-03-02  8470693237       True
2016-03-02   221785899       True
2016-03-03   569452661       True
2016-03-04   221785899      False
2016-03-04  8276343674       True