我有一个ranksdf
包含player names
,dates
和ranking
每个日期的数据框。date列是一个已解析的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
谢谢你帮我
只需将axis = 1添加到您的apply函数中,它将起作用:
ranksdf["t_wins"] = ranksdf.apply(lambda x: len(matchesdf[(matchesdf['t_date'] < x['date']) & (matchesdf['w_name'] == x['player']) & (matchesdf['round'] == 'F')]), axis =1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句