如何在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
相关产品推荐
相关产品推荐

