Python 如何将列转换为十六进制,然后连接成具有固定长度的新列?

Python 如何将列转换为十六进制,然后连接成具有固定长度的新列?,python,pandas,Python,Pandas,我有3个数字列,如下所示: import pandas as pd df = pd.DataFrame() df['col1']=[123456, 123456, 123456 ] df['col2']=[7, 65, 150] df['col3']=[1, 35, 60] 我想在将这三个列转换为十六进制数后创建一个新列,将它们连接起来,以便将col1转换为5位十六进制,将col2转换为3位十六进制,将col3转换为2位十六进制。我可以使用lambda函数将它们中的每一个转换为十六进制,但是,

我有3个数字列,如下所示:

import pandas as pd
df = pd.DataFrame()
df['col1']=[123456, 123456, 123456 ]
df['col2']=[7, 65, 150]
df['col3']=[1, 35, 60]
我想在将这三个列转换为十六进制数后创建一个新列,将它们连接起来,以便将col1转换为5位十六进制,将col2转换为3位十六进制,将col3转换为2位十六进制。我可以使用lambda函数将它们中的每一个转换为十六进制,但是,我无法在新列中始终包含10个字符。有什么建议吗

使用:

#create dictionary for columns names with lengths
d = {'col1':5, 'col2':3, 'col3':2}

#convert to format in nested list comprehension
#https://stackoverflow.com/a/12638477
L = [["{0:0{1}x}".format(x, v) for x in df[k]] for k, v in d.items()]
print (L)
[['1e240', '1e240', '1e240'], ['007', '041', '096'], ['01', '23', '3c']]

#join strings together
df['new'] = [''.join(x) for x in zip(*L)]
print (df)

     col1  col2  col3         new
0  123456     7     1  1e24000701
1  123456    65    35  1e24004123
2  123456   150    60  1e2400963c

您是否尝试过将十六进制数转换为十六进制字符串,将它们连接起来,然后将结果再次转换为十六进制数?不,我没有尝试过这种方法。我关心的是有固定的连接长度。我的猜测是,通过这种方式,我将得到与我想要的不同的结果。谢谢你的建议。非常感谢你的回答。这完全解决了我的目的。你让我开心!我刚刚接受了。对不起,我刚才错过了。再次感谢你的帮助。