为了账号安全,请及时绑定邮箱和手机立即绑定

Python Pandas 的更好解决方案

Python Pandas 的更好解决方案

慕村9548890 2023-07-18 15:22:38
所以我有 2 列,我想根据第二列的值创建第三列。我想从文本和数字开始,比如 B0292,如果该列的第二个值保持不变,那么新列中的数字将保持不变。如果数字发生变化,那么我的数字就会增加一。像B0293一样。d = {'col1': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ], 'col2': ['200', '200', '201', '201', '201', '201', '210', '210', '250', '251']}df = pd.DataFrame(data=d)df桌子:    col1    col20   a   2001   b   2002   c   2013   d   2014   e   2015   f   2016   g   2107   h   2108   i   2509   j   251我想要的结果:col1    col2    New Calculated Column0   a   200 B0292 - 2001   b   200 B0292 - 2002   c   201 B0293 - 2013   d   201 B0293 - 2014   e   201 B0293 - 2015   f   201 B0293 - 2016   g   210 B0294 - 2107   h   210 B0294 - 2108   i   250 B0295 - 2509   j   251 B0296 - 251我已经用下面的代码解决了这个问题,但我想知道是否有更好的 pandas/numpy 解决方案。df['New Calculated Column'] = ''a = 291b = 0for number in df.col2:    if number != df.iloc[b-1,1]:        a += 1        df['New Calculated Column'].iloc[(b)] = 'B0' + str(a) + ' - ' + df.iloc[b,1]    if b < 9:        b += 1
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

假设您的字符串有从第二个位置开始的数字,您可以尝试series.factorize使用字符串切片和系列添加:


s = "B0292"

s1 = s[0] + pd.Series(int(s[1:]) + df['col2'].factorize()[0],dtype=str)

df['New'] = df['col2'].radd(s1+'-')

print(df)


  ccol1 col2       New

0    a  200  B292-200

1    b  200  B292-200

2    c  201  B293-201

3    d  201  B293-201

4    e  201  B293-201

5    f  201  B293-201

6    g  210  B294-210

7    h  210  B294-210

8    i  250  B295-250

9    j  251  B296-251


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 49 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信