在pandas中通过一个标识符生成组密钥

时间:2018-06-07 20:07:53

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

我是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代码。

1 个答案:

答案 0 :(得分:0)

这是使用布尔掩码和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