Python连接两列,但保持修复长度

时间:2018-08-22 22:44:15

标签: python pandas concatenation

我有一个如下的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

2 个答案:

答案 0 :(得分:1)

您可能需要先将数字转换为字符串,然后再假设col1col2是字符串。

首先,找到组合的字符串长度以及缺少多少个零:

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])