You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:05:00