基于Pandas按nights列值重复rate字符串并以|分隔
Pandas实现字符串列按指定次数重复并用竖线分隔
需求:处理Pandas DataFrame时,需将rate列的字符串类型金额值,按照nights列的数值重复对应次数,最终用竖线|分隔各重复值,且首尾不得出现竖线。
处理前后示例
- 处理前的DataFrame:
currency rate nights 0 CZK 125.45 1 1 CZK 1726 3 2 CZK 135 2 3 CZK 2152.33 3
- 处理后的DataFrame:
currency rate nights 0 CZK 125.45 1 1 CZK 1726|1726|1726 3 2 CZK 135|135 2 3 CZK 2152.33|2152.33|2152.33 3
解决方案
以下是两种高效的实现方式:
方法1:逐行处理(逻辑直观,适合小型数据集)
import pandas as pd data = [['CZK', '125.45', 1], ['CZK', '1726',3], ['CZK', '135',2], ['CZK','2152.33',3]] df = pd.DataFrame(data, columns=['currency', 'rate','nights']) # 核心处理:生成重复指定次数的字符串列表,再用竖线连接 df['rate'] = df.apply(lambda row: '|'.join([row['rate']] * row['nights']), axis=1) print("处理后结果:") print(df)
方法2:矢量化操作(性能更优,适合大型数据集)
import pandas as pd data = [['CZK', '125.45', 1], ['CZK', '1726',3], ['CZK', '135',2], ['CZK','2152.33',3]] df = pd.DataFrame(data, columns=['currency', 'rate','nights']) # 核心处理:拼接重复的"|+rate"字符串,避免首尾出现竖线 df['rate'] = df['rate'] + ('|' + df['rate']).str.repeat(df['nights'] - 1) print("处理后结果:") print(df)
代码说明
- 方法1中,
[row['rate']] * row['nights']生成包含指定次数重复值的列表,'|'.join()将列表元素用竖线串联。 - 方法2中,
('|' + df['rate']).str.repeat(df['nights'] - 1)生成重复nights-1次的|+rate字符串,再与原rate拼接,天然避免首尾出现竖线。
内容的提问来源于stack exchange,提问作者Boomer
相关产品推荐
相关产品推荐

