首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pandas中按一个标识生成组密钥

pandas中按一个标识生成组密钥
EN

Stack Overflow用户
提问于 2018-06-08 04:07:53
回答 1查看 33关注 0票数 -1

我是python的新手,我想知道我能不能只用一列标识符生成组密钥。例如,我有如下的输入文件

代码语言:javascript
复制
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

我想要得到的预期输出是

代码语言:javascript
复制
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且GROUP_ID必须被写入,如果"GROUP”列是'N’,则生成继续id。

我想得到一些示例python代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 05:45:42

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50749440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档