我有一个如下的DataFrame。我想连接前两列。
<13
,那么我想在两者之间加0,以使长度变为13。>=13
,那么我只想串联。d = {'col1': [123456, 2, 1234567], 'col2': [1234567, 4, 1234567]}
df = pd.DataFrame(data=d)
df
df['var3'] = df.col1.astype(str) + df.col1.astype(str)
df
对于第二行,我希望2和2之间的数字为11,而不是22。
我想保留第三行,因为串联的长度为>13
。
答案 0 :(得分:1)
您可能需要先将数字转换为字符串,然后再假设col1
和col2
是字符串。
首先,找到组合的字符串长度以及缺少多少个零:
pads = 13 - (df.col1.str.len() + df.col2.str.len())
然后生成必要的填充并连接列和填充:
df['var3'] = df.col1 + pads.apply(lambda x: x * '0') + df.col2
#0 1234561234567
#1 2000000000004
#2 12345671234567
答案 1 :(得分:1)
对于每一行,创建一个具有3个值的元组:
string1
string2
两个字符串的长度与13(或任何目标长度)之间的差
x = pd.Series(list(zip(df['col1'].astype(str),
df['col2'].astype(str),
13 - (df['col1'].astype(str) + df['col2'].astype(str)).str.len())))
然后使用字符串方法ljust
用0填充左字符串并将其添加到右字符串。将所有内容分配给新列。
df['var3'] = x.apply(lambda x: x[0].ljust(x[2], '0') + x[1])