【问题标题】:Generate group key by one identifier in pandas通过 pandas 中的一个标识符生成组密钥
【发布时间】:2018-11-17 20:29:12
【问题描述】:

我是 python 新手,我想知道我可以只通过一列标识符生成组键。比如我有这样的输入文件

inv_id  GROUP
511031  Y
204501  Y
105756  N
134092  N
591688  N
235318  Y
642085  Y
134390  Y
211797  N
456165  N
556364  Y
169807  Y
406002  N
266034  N
313153  N
42474   Y
102622  Y

我想要得到的预期输出是

inv_id  GROUP   GROUP_ID
511031  Y       001
204501  Y       001
105756  N       002
134092  N       003
591688  N       004
235318  Y       005
642085  Y       005
134390  Y       005
211797  N       006
456165  N       007
556364  Y       008
169807  Y       008
406002  N       009
266034  N       010
313153  N       011
42474   Y       012
102622  Y       012

如果“GROUP”列“Y”在行中,所以它是同一个组并且必须写入 GROUP_ID,如果“GROUP”列是“N”,则生成继续 ID。

我想获取一些示例 python 代码。

【问题讨论】:

    标签: python python-3.x python-2.7 pandas numpy


    【解决方案1】:

    这是使用布尔掩码和pd.Series.cumsum 的一种方式。

    mask1 = df['GROUP'] == 'N'
    mask2 = (df['GROUP'] == 'Y') & (df['GROUP'].shift() == 'N')
    
    df['GROUP_ID'] = ((mask1 | mask2).cumsum() + 1).astype(str).str.zfill(3)
    
    print(df)
    
        inv_id GROUP GROUP_ID
    0   511031     Y      001
    1   204501     Y      001
    2   105756     N      002
    3   134092     N      003
    4   591688     N      004
    5   235318     Y      005
    6   642085     Y      005
    7   134390     Y      005
    8   211797     N      006
    9   456165     N      007
    10  556364     Y      008
    11  169807     Y      008
    12  406002     N      009
    13  266034     N      010
    14  313153     N      011
    15   42474     Y      012
    16  102622     Y      012
    

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2021-10-01
      • 1970-01-01
      • 2010-09-08
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多