如何解决更好的Python Pandas解决方案
所以我有2列,我想根据第二列的值创建第3列。我想从一个文本开始,用一个数字说B0292,如果该列的第二个值保持不变,那么我在新列中的数字将保持不变。如果数字改变,那么我的数字将增加一。就像B0293。
d = {'col1': ['a','b','c','d','e','f','g','h','i','j' ],'col2': ['200','200','201','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
解决方法
假设您的字符串具有从第二个位置开始的数字,则可以尝试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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。