如何将DataFrame中重复的无效采样值替换为0实现数据清洗
解决方案
完全可以实现需求,更推荐使用Pandas内置向量化操作而非循环,前者执行效率远高于Python层面的循环遍历,尤其适合大体积数据集。
核心逻辑
判断当前行的采样值是否与上一行完全相等,若相等则判定为复用的无效值,替换为0即可。执行操作前需确保DataFrame已经按日期索引升序排序,避免行序混乱导致判断错误。
代码实现
# 1. 确保DataFrame按date索引升序排序 df = df.sort_index() # 2. 构造判断掩码:当前值≠前一行值时返回True,否则返回False value_not_equal_prev = df['Sample Result'].ne(df['Sample Result'].shift()) # 3. 将与前一行相等的无效重复值替换为0 df.loc[~value_not_equal_prev, 'Sample Result'] = 0
执行以上代码后得到的df就和你给出的期望输出完全一致。
可选:循环实现(不推荐)
如果坚持使用循环实现,可参考以下代码,仅适合小数据集使用:
for idx in range(1, len(df)): # 逐行对比当前行与上一行的采样值 if df.iloc[idx]['Sample Result'] == df.iloc[idx-1]['Sample Result']: # 相等则替换为0 df.iloc[idx, df.columns.get_loc('Sample Result')] = 0
内容的提问来源于stack exchange,提问作者murcielago
相关产品推荐
相关产品推荐

