如何按规则修改pandas dataframe中指定行的特定值?
实现代码
你可以通过逐列判断规则后给name1行赋值的方式实现需求,下面提供两种常用写法:
1. 循环写法(逻辑直观,易理解)
import pandas as pd # 原有df构造 d = {'col1':['b',''], 'col2':['','a'], 'col3':['','']} index = ['name1','name2'] df = pd.DataFrame(index=index, data=d) # 核心替换逻辑 for col in df.columns: val_name1 = df.loc['name1', col] val_name2 = df.loc['name2', col] # 按优先级匹配规则 if val_name1.strip().islower(): df.loc['name1', col] = 'green' elif val_name2.strip().islower(): df.loc['name1', col] = 'red' else: df.loc['name1', col] = 'yellow'
2. 向量化写法(效率更高,适合大表场景)
需要先导入numpy依赖:
import numpy as np # 按规则生成判断条件 cond_green = df.loc['name1'].str.contains(r'[a-z]', na=False) cond_red = df.loc['name2'].str.contains(r'[a-z]', na=False) # 给name1行批量赋值 df.loc['name1'] = np.select([cond_green, cond_red], ['green', 'red'], default='yellow')
效果验证
运行后输出df即可得到你需要的结果:
col1 col2 col3 name1 green red yellow name2 a
你原来用的replace方法只能做全局的单模式匹配,不支持跨行的条件判断,因此不适用当前场景。
内容的提问来源于stack exchange,提问作者Rocco
相关产品推荐
相关产品推荐

