Python Pandas 的更好解决方案

所以我有 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    col2

0   a   200

1   b   200

2   c   201

3   d   201

4   e   201

5   f   201

6   g   210

7   h   210

8   i   250

9   j   251

我想要的结果:


col1    col2    New Calculated Column

0   a   200 B0292 - 200

1   b   200 B0292 - 200

2   c   201 B0293 - 201

3   d   201 B0293 - 201

4   e   201 B0293 - 201

5   f   201 B0293 - 201

6   g   210 B0294 - 210

7   h   210 B0294 - 210

8   i   250 B0295 - 250

9   j   251 B0296 - 251

我已经用下面的代码解决了这个问题,但我想知道是否有更好的 pandas/numpy 解决方案。


df['New Calculated Column'] = ''

a = 291

b = 0

for 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


慕村9548890
浏览 69回答 1
1回答

慕的地6264312

假设您的字符串有从第二个位置开始的数字,您可以尝试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)&nbsp; ccol1 col2&nbsp; &nbsp; &nbsp; &nbsp;New0&nbsp; &nbsp; a&nbsp; 200&nbsp; B292-2001&nbsp; &nbsp; b&nbsp; 200&nbsp; B292-2002&nbsp; &nbsp; c&nbsp; 201&nbsp; B293-2013&nbsp; &nbsp; d&nbsp; 201&nbsp; B293-2014&nbsp; &nbsp; e&nbsp; 201&nbsp; B293-2015&nbsp; &nbsp; f&nbsp; 201&nbsp; B293-2016&nbsp; &nbsp; g&nbsp; 210&nbsp; B294-2107&nbsp; &nbsp; h&nbsp; 210&nbsp; B294-2108&nbsp; &nbsp; i&nbsp; 250&nbsp; B295-2509&nbsp; &nbsp; j&nbsp; 251&nbsp; B296-251
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python