首页 > 解决方案 > 循环构建相关数据框

问题描述

假设我有一个df_player来自球员“约翰”的数据,他曾在他的 carrear 效力过 5 支球队:

teams = ['Liverpool', 'Chelsea', 'City', 'United', 'Burnley']

现在我想测试他的表现,他的下一支球队对阵他的前球队,就像这样:

Chelsea X Liverpool
City X Chelsea
United X City
Burnley X United

我正在尝试使用pandas. 数据框有这样的列:

...
name           280502 non-null object
team_name      280502 non-null object
adversary_name 280502 non-null object
....

到目前为止,我有:

for team in teams:
    df_former_team = df_player[(df_player['name'] == 'John')
                               &(df_player['team_name'] == team] 

    df_next_team = df_former_team[df_former_team['adversary_name'].isin(teams)

但我需要成对进行分析,就像上面的例子一样,以(下一个,前一个)方式。

我该怎么做pandas

编辑:

下面提供了一个解决方案:

for team, next_team in zip(teams, teams[1:]):
    print (team, next_team)

印刷:

Liverpool Chelsea
Chelsea City
City United
United Burnley

但正确的答案应该反过来打印:

Chelsea Liverpool 
City Chelsea 
United City
Burnley United

不需要数据帧输出,这高于预期输出。然后数据帧将被正确过滤。

标签: pythonpandas

解决方案


这将返回与John他以前的球队之一比赛的比赛的输出。这是你想要的吗?

player_games = df_player.query('name == "John"')
pair_performance = player_games.query('team_name in @teams or adversary_name in @teams')

推荐阅读