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

如何在Pandas DataFrame中按指定多条件替换ID1列的取值

嘿,这事儿好办!我来给你搞定这个DataFrame的处理需求,刚好有几种实用的方法能满足你的两个条件:

处理步骤与代码实现

首先先确认你的原始数据集:

import pandas as pd
import numpy as np

df_test = pd.DataFrame({'ID1':['A','B','C','BA','BA','AB','>','>','>','>'], 'ID2':['','','','','','','mh','mh','nn','nn']})

方法一:使用向量化的np.where(推荐,效率更高)

这种方式属于向量化操作,处理大规模数据集时速度更快,逻辑也清晰:

# 定义两个条件
condition_gt2 = df_test['ID1'].str.len() > 2  # ID1长度大于2的情况
condition_gt = df_test['ID1'] == '>'          # ID1为'>'的情况

# 嵌套使用np.where,先处理'>'的情况,再处理长度大于2的情况
df_test['ID1'] = np.where(
    condition_gt,
    df_test['ID2'],
    np.where(condition_gt2, df_test['ID1'].str[-1], df_test['ID1'])
)

# 查看处理后的结果
print(df_test['ID1'])

运行后得到的结果完全符合你的目标:

0      A
1      B
2      C
3      A
4      A
5      B
6     mh
7     mh
8     nn
9     nn
Name: ID1, dtype: object

方法二:使用apply(逻辑更直观,适合小数据集)

如果你觉得np.where的嵌套有点绕,也可以用apply方法自定义处理函数,逻辑一目了然:

def process_id(row):
    if row['ID1'] == '>':
        return row['ID2']
    elif len(row['ID1']) > 2:
        return row['ID1'][-1]
    else:
        return row['ID1']

# 对每一行应用处理函数
df_test['ID1'] = df_test.apply(process_id, axis=1)

这种方法的逻辑非常直白,但要注意:apply是逐行处理的,当你的DataFrame行数很多时,速度会比向量化操作慢一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:37:46