如何生成Pandas卷号?

2024-10-03 23:18:45 发布

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

我有下面的数据帧。你知道吗

df = pd.DataFrame({'A':['abc1@abc.com','abc2@abc.com','abc3@abc.com','abc4@abc.com','abc2@abc.com','abc3@abc.com'],
                   'B':[4,5,4,5,5,4],
                   })

我需要为A列生成rollnumber,格式为

“字符串+!--10digitnumberstaringfrom1--+字符串“

如果值重复,卷号应唯一。

预期输出:

              A     B  RollNumber
0   abc1@abc.com    4  ABC000000001AB
1   abc2@abc.com    5  ABC000000002AB
2   abc3@abc.com    4  ABC000000003AB
3   abc4@abc.com    5  ABC000000004AB
4   abc2@abc.com    5  ABC000000002AB
5   abc3@abc.com    4  ABC000000003AB

Tags: 数据字符串comdataframedf格式pdabc
1条回答
网友
1楼 · 发布于 2024-10-03 23:18:45

将列表理解与zero fill一起使用:

#python 3.6+
df['RollNumber'] = [f'ABC{x:010}AB' for x in range(1, len(df) + 1)]
#python 3
#df['RollNumber'] = ['ABC{0:010d}AB'.format(x) for x in range(1, len(df) + 1)]
print (df)

              A  B       RollNumber
0  abc1@abc.com  4  ABC0000000001AB
1  abc2@abc.com  5  ABC0000000002AB
2  abc3@abc.com  4  ABC0000000003AB
3  abc4@abc.com  5  ABC0000000004AB
4   abc2@bc.com  5  ABC0000000005AB
5   abc3@bc.com  4  ABC0000000006AB

编辑:对于每列的相同值A需要^{}^{}

s = pd.Series(pd.factorize(df['A'])[0] + 1).astype(str).str.zfill(10)
df['RollNumber'] = ('ABC' + s + 'AB')
print (df)
              A  B       RollNumber
0  abc1@abc.com  4  ABC0000000001AB
1  abc2@abc.com  5  ABC0000000002AB
2  abc3@abc.com  4  ABC0000000003AB
3  abc4@abc.com  5  ABC0000000004AB
4  abc2@abc.com  5  ABC0000000002AB
5  abc3@abc.com  4  ABC0000000003AB

相关问题 更多 >