【问题标题】:Pandas: Days since last event per idPandas:自每个 id 上次事件以来的天数
【发布时间】:2018-01-21 15:59:13
【问题描述】:

我想为我的dataframe df['days_since_last'] 构建一个列,显示自每个 player_id 的最后一场比赛以来的天数,每个 event_id 和 nan 如果该行是数据集中玩家的第一个比赛。

我的数据示例:

   event_id  player_id  match_date
0   1470993     227485  2015-11-29
1   1492031     227485  2016-07-23
2   1489240     227485  2016-06-19
3   1495581     227485  2016-09-02
4   1490222     227485  2016-07-03
5   1469624     227485  2015-11-14
6   1493822     227485  2016-08-13
7   1428946     313444  2014-08-10
8   1483245     313444  2016-05-21
9   1472260     313444  2015-12-13

我尝试了Find days since last event pandas dataframe 中的代码,但得到了无意义的结果。

【问题讨论】:

  • 您是否尝试先按 match_date 对每个组进行排序?
  • 我认为您首先需要df = df.sort_values(['event_id','player_id']),但是您可以添加预期的输出吗?

标签: pandas


【解决方案1】:

看来你需要先排序:

df['days_since_last_event'] = (df.sort_values(['player_id','match_date'])
                                 .groupby('player_id')['match_date'].diff()
                                 .dt.days)
print (df)
   event_id  player_id match_date  days_since_last_event
0   1470993     227485 2015-11-29                   15.0
1   1492031     227485 2016-07-23                   20.0
2   1489240     227485 2016-06-19                  203.0
3   1495581     227485 2016-09-02                   20.0
4   1490222     227485 2016-07-03                   14.0
5   1469624     227485 2015-11-14                    NaN
6   1493822     227485 2016-08-13                   21.0
7   1428946     313444 2014-08-10                    NaN
8   1483245     313444 2016-05-21                  160.0
9   1472260     313444 2015-12-13                  490.0

【讨论】:

    【解决方案2】:

    演示:

    In [174]: df['days_since_last'] =  (df.groupby('player_id')['match_date']
                                          .transform(lambda x: (x.max()-x).dt.days))
    
    In [175]: df
    Out[175]:
       event_id  player_id match_date  days_since_last
    0   1470993     227485 2015-11-29              278
    1   1492031     227485 2016-07-23               41
    2   1489240     227485 2016-06-19               75
    3   1495581     227485 2016-09-02                0
    4   1490222     227485 2016-07-03               61
    5   1469624     227485 2015-11-14              293
    6   1493822     227485 2016-08-13               20
    7   1428946     313444 2014-08-10              650
    8   1483245     313444 2016-05-21                0
    9   1472260     313444 2015-12-13              160
    

    【讨论】:

      猜你喜欢
      • 2017-10-26
      • 2019-02-17
      • 1970-01-01
      • 2015-08-04
      • 2019-08-16
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多