2016-07-19 21 views
2

我有代表在一場比賽中從玩家分數據幀,時間爲指標:獲得第一次occurence與日期時間索引的數據幀大熊貓

   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_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

在第二個datafram中有額外的行即 – ayhan

+0

我不好,只是修好了。 – chilladx

回答

2

使用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