根据来自另一个数据框的计数将列添加到数据框

adding column to dataframe based on count from another dataframe

我有一个数据框 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

从第二个数据帧我知道什么时候一个特定的玩家通过计算回合等于[的行在给定时间赢得了比赛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 中查找信息的限制是 时间 (因为我只想知道 matchesdf 中排名前的获胜次数=13=]),显然 选手姓名,以及 回合(因为锦标赛的胜利是由赢得决赛来定义的)。

结果应如下所示:

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

谢谢你帮助我。

只需将 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)