Python连接两列,但保持固定长度

2024-06-02 07:13:33 发布

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

我有一个数据帧如下。我想连接前两列。你知道吗

  • 如果它们的连接长度是<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之间的110,而不是'22'。 我想保持第三行不变,因为连接的长度是>13。你知道吗


Tags: 数据dataframedfdata情况col2col1pd
2条回答

对于每行,创建一个具有3个值的元组:

字符串1

字符串2

两个字符串的长度与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])

在执行其他操作之前,可能需要将数字转换为字符串,因此我假设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

相关问题 更多 >