如何在熊猫中生成卷数?

时间:2018-09-24 06:31:21

标签: python pandas

我有以下数据框。

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

“字符串+!-10位数字从1开始盯着+字符串”

如果重复输入值,则卷号应该唯一。

预期输出:

              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

1 个答案:

答案 0 :(得分:2)

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需要factorizeSeries.str.zfill

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