【问题标题】:switching every 2nd row value in pandas切换熊猫中的每第二行值
【发布时间】:2018-01-09 15:15:08
【问题描述】:

我的数据框是一个包含不同统计数据的足球比赛列表,大约有 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。
理想情况下,我会将其添加到原始电子表格中,但我在 pandas 中创建了该季节的累积平均值,因此希望也有办法将其合并。

【问题讨论】:

    标签: pandas dataframe


    【解决方案1】:

    您可以在 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 获取字典映射,然后在opp_team 上使用map

    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
    

    【讨论】:

    • 非常感谢。我已经为此工作了很长时间
    猜你喜欢
    • 2019-03-05
    • 2021-07-10
    • 2019-10-26
    • 1970-01-01
    • 2016-12-28
    • 2019-01-24
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    相关资源
    最近更新 更多