【问题标题】:Combine certain rows values of duplicate rows Pandas组合重复行 Pandas 的某些行值
【发布时间】:2018-04-07 16:18:04
【问题描述】:

我有一个基于足球运动员的数据框。当球员在赛季中期转会时,我发现重复的行。我的目标是将两个联赛中累积的积分相加,然后将它们加在一起以排成一排。

以下是数据示例:

name    full_name   club    Points  Start   Sub
84  S. Mustafi  Shkodran Mustafi    Arsenal 76  26  1
85  S. Mustafi  Shkodran Mustafi    Arsenal -2  0   1
89  Bruno   Bruno Soriano Llido Villarreal CF   43  15  16
90  Bruno   Bruno Gonzalez Cabrera  Getafe CF   43  15  16
119 Oscar   Oscar dos Santos Emboaba    NaN 16  5   8
120 Oscar   Oscar dos Santos Emboaba    NaN 1   0   2
121 Oscar   Oscar Rodriguez Arnaiz  Real Madrid CF  16  5   8
122 Oscar   Oscar Rodriguez Arnaiz  Real Madrid CF  1   0   2
188 C. Bravo    Claudio Bravo   Manchester City 61  22  8
189 C. Bravo    Claudio Bravo   Manchester City 1   1   0
193 Naldo   Ronaldo Aparecido Rodrigues FC Schalke 04   58  19  1
194 Naldo   Edinaldo Gomes Pereira  RCD Espanyol    58  19  1
200 G. Castro   Gonzalo Castro  Borussia Dortmund   79  23  6
201 G. Castro   Gonzalo Castro  Malaga CF   79  23  6
209 Juanfran    Juan Francisco Torres Belen Atletico Madrid 86  21  8
210 Juanfran    Juan Francisco Torres Belen Atletico Madrid 74  34  2
211 Juanfran    Juan Francisco Moreno Fuertes   RC Coruna   86  21  8
212 Juanfran    Juan Francisco Moreno Fuertes   RC Coruna   74  34  2

我的目标数据框会包含像 Mustafi 的 Points Start 和 Sum 值这样的玩家相加,从而只给出一名玩家。 像布鲁诺这样的球员显然不是同一个人,所以我不想把两个布鲁诺加在一起。

name    full_name   club    Points  Start   Sub
84  S. Mustafi  Shkodran Mustafi    Arsenal 74  26  2
89  Bruno   Bruno Soriano Llido Villarreal CF   43  15  16
90  Bruno   Bruno Gonzalez Cabrera  Getafe CF   43  15  16
119 Oscar   Oscar dos Santos Emboaba    NaN 17  5   10
121 Oscar   Oscar Rodriguez Arnaiz  Real Madrid CF  17  5   10
188 C. Bravo    Claudio Bravo   Manchester City 62  23  8
193 Naldo   Ronaldo Aparecido Rodrigues FC Schalke 04   58  19  1
194 Naldo   Edinaldo Gomes Pereira  RCD Espanyol    58  19  1
200 G. Castro   Gonzalo Castro  Borussia Dortmund   158 46  12
209 Juanfran    Juan Francisco Torres Belen Atletico Madrid 86  21  8
212 Juanfran    Juan Francisco Moreno Fuertes   RC Coruna   74  34  2

任何帮助都会很棒!

【问题讨论】:

    标签: python pandas dataframe jupyter-notebook


    【解决方案1】:

    你需要:

    df[['name','full_name','club']] = df[['name','full_name','club']].fillna('')
    d = {'Points':'sum', 'Start':'sum', 'Sub':'sum', 'club':'first'}
    df = (df.groupby(['name','full_name'], sort=False, as_index=False)
            .agg(d)
            .reindex(columns=df.columns))
    
    with pd.option_context('display.expand_frame_repr', False):
        print (df)
               name                      full_name                   club  Points  Start  Sub
    0    S. Mustafi               Shkodran Mustafi                Arsenal      74     26    2
    1   Bruno Bruno                   SorianoLlido          Villarreal CF      43     15   16
    2   Bruno Bruno               Gonzalez Cabrera              Getafe CF      43     15   16
    3         Oscar       Oscar dos Santos Emboaba                             17      5   10
    4         Oscar         Oscar Rodriguez Arnaiz         Real Madrid CF      17      5   10
    5      C. Bravo                  Claudio Bravo        Manchester City      62     23    8
    6         Naldo    Ronaldo Aparecido Rodrigues          FC Schalke 04      58     19    1
    7         Naldo         Edinaldo Gomes Pereira           RCD Espanyol      58     19    1
    8     G. Castro                 Gonzalo Castro      Borussia Dortmund     158     46   12
    9      Juanfran          Juan Francisco Torres  Belen Atletico Madrid     160     55   10
    10     Juanfran  Juan Francisco Moreno Fuertes              RC Coruna     160     55   10
    

    解释

    1. 首先将NaNs 替换为''fillna 以避免在groupby 中省略行
    2. groupbyaggdictionary 聚合,并指定列及其聚合函数
    3. 最后一次显示所有行,暂时使用with

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多