如何基于DT_CLS字段值填充OPEN_CLS_STS字段?
如何基于DT_CLS字段值填充OPEN_CLS_STS字段?
看起来你现在的问题是想根据DT_CLS字段是否有日期值,来自动填充OPEN_CLS_STS的状态,但你写的函数逻辑有点问题哦~我来帮你理一理:
首先说下你原来函数的问题:你用project['DT_CLS'].isnull()是在判断整个列是否全为空,不是逐行检查每个单元格的空值;而且你返回的是project['OPEN_CLS_STS'] == 'O'这种比较语句,这只会生成一堆布尔值(True/False),根本没实现赋值填充的效果。
给你几个简单好用的正确方法,都是针对pandas DataFrame的场景:
方法一:用numpy.where(推荐,效率最高)
这是向量化操作,处理大数据集速度很快,直接一行代码搞定:
import numpy as np # 假设你的数据集是df,替换成你实际的变量名 df['OPEN_CLS_STS'] = np.where(df['DT_CLS'].isnull(), 'O', 'C')
逻辑很直白:逐行检查DT_CLS是否为空,空的话就给OPEN_CLS_STS赋值'O',有日期值就赋值'C'。
方法二:用apply逐行处理
如果更习惯用函数的方式,那要修改成处理每一行的逻辑:
import pandas as pd def fill_status(row): # 检查当前行的DT_CLS是否为空 if pd.isnull(row['DT_CLS']): return 'O' else: return 'C' # axis=1表示按行应用这个函数 df['OPEN_CLS_STS'] = df.apply(fill_status, axis=1)
这个方法会遍历每一行,根据该行的DT_CLS值返回对应的状态,然后赋值给OPEN_CLS_STS。
提醒一下:如果你的数据集行数很多,优先用方法一的向量化操作,apply因为是逐行循环,速度会慢不少。
备注:内容来源于stack exchange,提问作者Derekhe1988
相关产品推荐
相关产品推荐

