Python的更好解决方案

2024-06-16 11:02:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两列,我想根据第二列的值创建第三列。我想从一个文本和一个数字开始,比如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

Tags: 文本numberdfnewifcolumn数字号码
1条回答
网友
1楼 · 发布于 2024-06-16 11:02:23

假设您的字符串具有从第2个位置开始的数字,您可以尝试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

相关问题 更多 >