gpt4 book ai didi

python - 更好的 Python Pandas 解决方案

转载 作者:行者123 更新时间:2023-12-03 23:04:06 25 4
gpt4 key购买 nike

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

最佳答案

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

关于python - 更好的 Python Pandas 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63778218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com