【问题标题】:How to create a column with auto increment and condition pandas如何创建具有自动增量和条件 pandas 的列
【发布时间】:2019-09-18 19:02:33
【问题描述】:

我想创建一个 DDDD 列,该列自动递增并按 key 和 tag_en 列分组。如果tag_en上的值相同,那么DDDD值也一样

我用 group by 和 cumcount 尝试过 pandas

df1['DDDD'] = df1.groupby(['key']).cumcount()+1

这是图像的链接,我希望数据如何以及我得到了什么 https://imgur.com/8KAlAYe

编辑:对不起,这是我的错,我只是发现每次出现新键时我都需要从零开始重置 DDDD 值https://imgur.com/MEnDOO7

【问题讨论】:

  • 使用df1['DDDD'] = df1.groupby(['key','tag_en']).ngroup()
  • 编辑:对不起,这是我的错,我只是发现每次出现新键时,我都需要从 1 imgur.com/MEnDOO7 开始重置 DDDD 值
  • 然后使用df1['DDDD'] = df1.groupby('key').ngroup()
  • 我能否以某种方式更改 DDDD 列以便从 0001 而不是 0000 开始
  • 恐怕如果不按DDDD列的值将tag_en放在组中,将都一样imgur.com/j0EsBtX

标签: python pandas


【解决方案1】:

您可以将GroupBy.transformfactorize 一起使用,添加1,通过Series.astype 转换为字符串,最后使用Series.str.zfill 添加零:

df1 = pd.DataFrame({'key':['name','name','name','age','age','age','weight','weight','weight'], 
                    'tag_en':['me','me','notme',18,18,18,100,101,102],
                    'CCC':['001','001','001','002','002','002','003','003','003'],
                    'DDDD':['0001','0001','0002','0001','0001','0001','0001','0002','0003']})


df1['DDDD1'] = (df1.groupby('key', sort=False)['tag_en']
                  .transform(lambda x: pd.factorize(x)[0])
                  .add(1)
                  .astype(str)
                  .str.zfill(4))
print (df1)            
      key tag_en  CCC  DDDD DDDD1
0    name     me  001  0001  0001
1    name     me  001  0001  0001
2    name  notme  001  0002  0002
3     age     18  002  0001  0001
4     age     18  002  0001  0001
5     age     18  002  0001  0001
6  weight    100  003  0001  0001
7  weight    101  003  0002  0002
8  weight    102  003  0003  0003

【讨论】:

  • DDDD值怎么从002跳到0236 imgur.com/LrCW0Cc
  • 我认为这是我想要的最终形式,无论如何感谢您的奉献imgur.com/Q6wQ7UZ
  • 这是样本数据 df1 = pd.DataFrame({'key':['name','name','name','age','age','age',' weight','weight','weight'], 'tag_en':['me','me','notme',18,18,18,100,101,102],'CCC':[001,001,001,002,002,002,003,003,003]}) 和结果 {' DDDD':[0001,0001,0002,0001,0001,0001,0001,0002,0003]}
  • 我认为您的 DDDD 不正确。我的是 {'DDDD':[0001,0001,0002,0001,0001,0001,0001,0002,0003]} 'weight' 中的 DDDD 是 1,2,3 的原因,因为 'tag_en' 彼此不同所以 DDDD 只是自动递增。如果 'weight' 中的 'tag_en' 为 [100,100,100] 则 DDDD 为 [1,1,1] ,如果 [100,100,101] 则 [1,1,2]
  • @Kai - 哎呀,我创建了错误的数据样本。现在理解并编辑答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 2013-07-27
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
相关资源
最近更新 更多