代码之家  ›  专栏  ›  技术社区  ›  beta

python pandas带有group by和condition的新数据帧列

  •  3
  • beta  · 技术社区  · 6 年前

    我有一个熊猫数据框架,如下所示。

    player  count1  count2
    A       1       1
    A       2       1
    A       3       1
    A       4       2
    A       5       2
    B       1       1
    B       2       2
    B       3       2
    B       4       2
    

    player 包含名称, count1 是累积和和列 count2 包含其他计数。

    现在我想创建一个新列,其中包含 第1号 在哪列 第二号 首先包含值 2 .

    因此,结果应该如下所示:

    player  count1  count2  new
    A       1       1       4
    A       2       1       4
    A       3       1       4
    A       4       2       4
    A       5       2       4
    B       1       1       2
    B       2       2       2
    B       3       2       2
    B       4       2       2
    

    我试着用 transform 但是我不知道如何将它与基于

    groupby

    df['new'] = df.loc[matches['count2'] == 2, 'count1'].min()
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   jezrael    6 年前

    map Series

    s = df[df['count2'] == 2].drop_duplicates(['player']).set_index('player')['count1']
    
    df['new'] = df['player'].map(s)
    print (df)
      player  count1  count2  new
    0      A       1       1    4
    1      A       2       1    4
    2      A       3       1    4
    3      A       4       2    4
    4      A       5       2    4
    5      B       1       1    2
    6      B       2       2    2
    7      B       3       2    2
    8      B       4       2    2
    

    2 boolean indexing

    print (df[df['count2'] == 2])
      player  count1  count2
    3      A       4       2
    4      A       5       2
    6      B       2       2
    7      B       3       2
    8      B       4       2
    

    player drop_duplicates

    print (df[df['count2'] == 2].drop_duplicates(['player']))
      player  count1  count2
    3      A       4       2
    6      B       2       2