初始问题:你有一个包含两列(field
和value
)的数据框,需要根据field
列的值对每行执行不同的检查,并将结果存储在status
列中。你的代码已经实现了这个需求,通过一个函数列表与字段名对应并使用apply
函数来调用相应的方法。
对于改进方法,可以使用Python字典和条件表达式(如np.select
)来实现更简洁且易于扩展的解决方案:
import pandas as pd
import numpy as np
data = {
'field': ['a', 'b'],
'value': [5, 20],
}
df = pd.DataFrame(data)
conditions = {
'a': (1 <= df['value']) & (df['value'] <= 10),
'b': df['value'].isin([10, 20, 30, 40]),
}
choices = [True] * len(conditions)
df['status'] = np.select(list(conditions.values()), choices, default=False)
print('After check DF')
print(f'{df=}')
更新后的问题:
基于编辑后的信息,你可以使用np.select
结合多个条件和选择列表来实现目标功能。这已经在你的最后示例代码中得到体现,这段代码是有效且易于添加更多字段的:
data = {
'field': ['a', 'b', 'c'],
'value': [5, 20, 80],
}
df = pd.DataFrame(data)
condlist = [df['field'] == 'a', df['field'] == 'b', df['field'] == 'c']
choicelist = [df['value'].between(1, 10), df['value'].isin([10, 20, 30, 40]), df['value'].between(50, 100)]
df['status'] = np.select(condlist, choicelist, False)
print('After check DF')
print(f'{df=}')