gpt4 book ai didi

python - 在Python中按位置将数字从其他列转移到新列?

转载 作者:行者123 更新时间:2023-12-01 01:47:18 24 4
gpt4 key购买 nike

我需要这些列:CAD_ADMIN,rank

CAD_ADMIN rank
0507502 001
0507503 002
0507504 003
0507505 004

我做了rank像这样的专栏:

dff['rank']= (dff.groupby('CAD_ADMIN').cumcount()+1).astype(str).str.zfill(3)

这里的事情是我需要做的一个新列将包含:

CAD_ADMIN 中的前 5 个数字然后是字母“qw”,然后是 CAD_ADMIN 的其余部分(位置上有 6 和 7 数字,然后是 rank 列例如:

new_col
05075qw02001 #first line
etc..

我尝试了一些 lambda 函数,但与想要的结果相去甚远。

最佳答案

使用indexing by stradd :

dff['new'] = dff['CAD_ADMIN'].str[:5].add('qv').add(dff['CAD_ADMIN'].str[5:]).add(dff['rank'])
print (df)
CAD_ADMIN rank new
0 0507502 001 05075qv02001
1 0507503 002 05075qv03002
2 0507504 003 05075qv04003
3 0507505 004 05075qv05004

如果输出中不需要排名列df:

rank = (dff.groupby('CAD_ADMIN').cumcount()+1).astype(str).str.zfill(3)
dff['new'] = dff['CAD_ADMIN'].str[:5].add('qv').add(dff['CAD_ADMIN'].str[5:]).add(rank)
print (dff)
CAD_ADMIN new
0 0507502 05075qv02001
1 0507503 05075qv03001
2 0507504 05075qv04001
3 0507505 05075qv05001

具有格式和列表理解的解决方案::

rank = (dff.groupby('CAD_ADMIN').cumcount()+1).astype(str).str.zfill(3)
dff['new'] = ['{}qv{}'.format(x[:5], x[5:]) for x in dff['CAD_ADMIN']] + rank
#python 3.6 solution
#dff['new'] = [f'{x[:5]}qv{x[5:]}' for x in dff['CAD_ADMIN']] + rank
print (dff)
CAD_ADMIN new
0 0507502 05075qv02001
1 0507503 05075qv03001
2 0507504 05075qv04001
3 0507505 05075qv05001
<小时/>

如果输出DataFrame中需要列rank,则解决方案:

dff['rank'] = (dff.groupby('CAD_ADMIN').cumcount()+1).astype(str).str.zfill(3)
dff['new'] = ['{}qv{}'.format(x[:5], x[5:]) for x in dff['CAD_ADMIN']] + dff['rank']
print (dff)
CAD_ADMIN rank new
0 0507502 001 05075qv02001
1 0507503 001 05075qv03001
2 0507504 001 05075qv04001
3 0507505 001 05075qv05001

关于python - 在Python中按位置将数字从其他列转移到新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51151078/

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