根据另一个数据帧的计数向数据帧添加列

时间:2015-08-02 08:08:01

标签: python pandas lookup

我的数据框ranksdf包含player namesdates,以及每个日期的ranking。日期列是已解析的datetime对象(可能与以后的日期比较相关):

player      date        ranking
A           20120601    1
B           20120601    2
C           20120601    3
A           20130601    1
B           20130601    2
C           20130601    3

我想要做的是添加一个新列,在该日期之前计算每个玩家的tournament wins。有关锦标赛胜利的信息来自另一个名为matchesdf的数据框:

t_name  t_date      w_name      round
X       20120101    A           F   
X       20120101    A           SF          
Y       20120201    B           F
Y       20120201    B           SF
Z       20130101    A           F
  • t_name =锦标赛名称
  • t_date =锦标赛日期
  • w_name =获胜者名称
  • round =锦标赛中的回合。 F =最终,SF =半决赛

从第二个数据框中我知道 特定的玩家在给定时间通过计算圆等于F的行来赢得锦标赛。

所以我想做的是向ranksdf添加一个新列,计算锦标赛胜利,但只到ranksdf.date

在伪代码中是这样的:ranksdf['t_wins'] = ranksdf.apply(lambda x: matchesdf[(matchesdf['t_date'] < x['date']) & (matchesdf['w_name'] == x['player']) & (matchesdf['round'] == 'F')].count())

因此,在matchesdf中查找信息的限制是时间(因为我想知道在ranksdf中排名之前的胜利) ,显然球员名称(因为锦标赛胜利是通过赢得决赛来定义的。)

结果应如下所示:

player      date        ranking     t_wins
A           20120601    1           1
B           20120601    2           1
C           20120601    3           0
A           20130601    1           2
B           20130601    2           1
C           20130601    3           0

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

只需将axis = 1添加到您的应用功能中即可使用:

ranksdf["t_wins"]  = ranksdf.apply(lambda x: len(matchesdf[(matchesdf['t_date'] < x['date']) & (matchesdf['w_name'] == x['player']) & (matchesdf['round'] == 'F')]), axis =1)