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

更新第一组中所有行的列

  •  0
  • darkpool  · 技术社区  · 4 年前

    date          amount
    2019-01-01    10
    2019-01-01    14
    2019-02-01    16
    2019-02-01    34
    2019-03-01    36
    2019-04-01    25
    2019-04-01    45
    2019-05-01    23
    

    我需要按日期分组并设置所有 amount 第一组中的值为0。结果是:

    date          amount
    2019-01-01    0
    2019-01-01    0
    2019-02-01    16
    2019-02-01    34
    2019-03-01    36
    2019-04-01    25
    2019-04-01    45
    2019-05-01    23
    
    2 回复  |  直到 4 年前
        1
  •  4
  •   jezrael    4 年前

    您可以通过比较 date 按所有值设置 0 通过 DataFrame.loc

    df.loc[df['date'].eq(df['date'].iat[0]), 'amount'] = 0
    print (df)
             date  amount
    0  2019-01-01       0
    1  2019-01-01       0
    2  2019-02-01      16
    3  2019-02-01      34
    4  2019-03-01      36
    5  2019-04-01      25
    6  2019-04-01      45
    7  2019-05-01      23
    

    另一个想法 Series.rank

    df.loc[df['date'].rank(method='dense').eq(1), 'amount'] = 0
    
        2
  •  1
  •   sammywemmy    4 年前

    你可以利用 groupby ngroup :

    df.loc[df.groupby("date").ngroup().eq(0), "amount"] = 0