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

如何在Pandas中按条件用city和country列值替换含下划线的temp_id内容

用Pandas实现temp_id列的特定替换需求

需求说明:针对DataFrame中的temp_id列,将所有包含下划线(_)的数值,替换为该temp_id的数字部分 + city列值 + country列值的组合;不包含下划线的数值保持不变,同时注意部分行可能存在city或country为空的情况,这类行的temp_id也保持不变。

原始DataFrame df

temp_id          city    country
    12225IND         DELHI    IND
    14445UX_TY       AUSTIN   US
    56784SIN         BEDOK    SIN
    72312SD_IT_UZ    NEW YORK US
    47853DUB         DUBAI    UAE
    80976UT_IS_SZ    SYDENY   AUS
    89012TY_JP_IS    TOKOYO   JPN
    51309HJ_IS_IS
    42087IND          MUMBAI  IND 

期望输出

temp_id          city    country
12225IND         DELHI    IND
14445AUSTINUS    AUSTIN   US
56784SIN         BEDOK    SIN
72312NEWYORKUS   NEW YORK US
47853DUB         DUBAI    UAE
80976SYDENYAUS   SYDENY   AUS
89012TOKOYOJPN   TOKOYO   JPN
51309HJ_IS_IS
42087IND          MUMBAI  IND 

解决方案代码

通过Pandas的字符串处理方法结合条件筛选即可实现:

import pandas as pd

# 先将空字符串转换为缺失值,方便后续判断
df[['city', 'country']] = df[['city', 'country']].replace('', pd.NA)

# 提取temp_id开头的连续数字部分
df['temp_num'] = df['temp_id'].str.extract(r'^(\d+)', expand=False)

# 定义需要替换的行:temp_id含下划线,且city、country均不为空
replace_mask = df['temp_id'].str.contains('_', na=False) & df['city'].notna() & df['country'].notna()

# 执行替换:数字部分 + 去除空格的city + country
df.loc[replace_mask, 'temp_id'] = df.loc[replace_mask, 'temp_num'] + \
                                  df.loc[replace_mask, 'city'].str.replace(' ', '') + \
                                  df.loc[replace_mask, 'country']

# 清理临时列(可选)
df = df.drop(columns='temp_num')

# 查看最终结果
print(df)

代码说明

  • str.extract(r'^(\d+)'):精准提取temp_id开头的连续数字序列,确保只取需要的前缀部分。
  • 筛选条件replace_mask:避免因city或country为空导致拼接出无效值,只处理数据完整的目标行。
  • str.replace(' ', ''):处理city中带空格的情况(如示例中的NEW YORK),转换成无空格字符串后再拼接,匹配期望输出格式。

内容的提问来源于stack exchange,提问作者aeapen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:30:59