切换pandas中的每个第2行值

时间:2017-08-02 11:50:00

标签: pandas dataframe

我的数据框是一个具有不同统计数据的足球比赛列表,大约有300个条目。

    game_id    team  opp_team  avg_marks  
0      2919       STK     BL        122  
1      2919       BL      STK       114
2      2920       RICH    SYD       135
3      2920       SYD     RICH      108

我想将反对派统计数据添加为每个条目的新列。结果数据框将显示为此

    game_id    team  opp_team  avg_marks  opp_avg_marks
0      2919       STK     BL        122         114
1      2919       BL      STK       114         122
2      2920       RICH    SYD       135         108
3      2920       SYD     RICH      108         135

任何建议都会受到欢迎,我是这个论坛的新手。我已经尝试过映射,但条目是以2列为准,game_id和opp_team 理想情况下,我会在原始电子表格中添加它,但我在熊猫中创建了本季的累积平均值,所以希望有一种方法可以将其合并。

1 个答案:

答案 0 :(得分:0)

您可以对game_id进行分组并反转avg_marks

In [725]: df.groupby('game_id')['avg_marks'].transform(lambda x: x[::-1])
Out[725]:
0    114
1    122
2    108
3    135
Name: avg_marks, dtype: int64

In [726]: df['opp_avg_marks'] = (df.groupby('game_id')['avg_marks']
                                   .transform(lambda x: x[::-1]))

In [727]: df
Out[727]:
   game_id  team opp_team  avg_marks  opp_avg_marks
0     2919   STK       BL        122            114
1     2919    BL      STK        114            122
2     2920  RICH      SYD        135            108
3     2920   SYD     RICH        108            135

或者,从teamavg_marks获取字典映射,然后在map上使用opp_team

In [729]: df['opp_team'].map(df.set_index('team')['avg_marks'].to_dict())
Out[729]:
0    114
1    122
2    108
3    135
Name: opp_team, dtype: int64