【问题标题】:Pandas add a column of value of next row in another column (per group)熊猫在另一列(每组)中添加下一行的一列值
【发布时间】:2022-11-07 23:19:40
【问题描述】:

我有数据框:

df = batch Code
      a     100
      a     120
      a     130
      a     120 
      b     140
      b     150
      c     100

我想添加一个列“add_code”,它将是每批下一行中“代码”列的值。 所以输出将是:

df = batch Code next_code
      a     100    120
      a     120    130
      a     130    120
      a     120    END
      b     140    150
      b     150    END
      c     100    END

最好的方法是什么?

【问题讨论】:

    标签: pandas dataframe data-science data-munging


    【解决方案1】:

    使用 DataFrameGroupBy.shiftfill_value 参数:

    df['next_code'] = df.groupby('batch')['Code'].shift(-1, fill_value='END')
    print (df)
      batch  Code next_code
    0     a   100       120
    1     a   120       130
    2     a   130       120
    3     a   120       END
    4     b   140       150
    5     b   150       END
    6     c   100       END
    

    或者使用 Series.fillna 获取旧熊猫版本:

    df['next_code'] = df.groupby('batch')['Code'].shift(-1).fillna('END')
    print (df)
      batch  Code next_code
    0     a   100     120.0
    1     a   120     130.0
    2     a   130     120.0
    3     a   120       END
    4     b   140     150.0
    5     b   150       END
    6     c   100       END
    

    【讨论】:

      【解决方案2】:

      您可以尝试使用 groupby 和 apply 方法来解决这个问题。

      import pandas as pd
      def next_code(x):
          return x.shift(-1).fillna('END')
      df = pd.DataFrame({
          "batch" : ['a','a','a','a','b','b','c'],
          "code" : [100,120,130,120,140,150,100]
      })
      df['next_code'] = df.groupby(['batch'])['code'].apply(lambda x: next_code(x))
      print(df)
      

      输出:

        batch  code next_code
      0     a   100     120.0
      1     a   120     130.0
      2     a   130     120.0
      3     a   120       END
      4     b   140     150.0
      5     b   150       END
      6     c   100       END
      

      【讨论】:

        猜你喜欢
        • 2022-12-21
        • 2018-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        相关资源
        最近更新 更多