如何使用Pandas根据指定多列的求和结果为DataFrame目标列赋值
Pandas实现根据指定列和赋值INFO列
这需求用Pandas的向量化操作就能轻松搞定,完全不用写低效的循环,下面给你两种靠谱的实现方式:
方法一:用numpy.where快速赋值
这种方法一步到位,逻辑清晰,适合直接生成结果:
import pandas as pd import numpy as np # 初始化你的DataFrame df1 = pd.DataFrame({ 'YE': [342233.58, 254571.80, 2980.53, 0, 4469.02, 5951.07], 'Q1': [346233.58, -24571.80, 2970.53, 0, 4469.02, 5951.07], 'Q2': [346233.58, -24571.80, 2970.53, 0, 4469.02, 5951.07], 'Q3': [346233.58, -24571.80, 2970.53, 0, 4469.02, 5951.07], 'Q4': [346233.58, -24571.80, 2970.53, 0, 4469.02, 5951.07], 'INFO': ['', '', '', '', '', ''] }) # 定义需要计算和的目标列 target_cols = ['YE', 'Q1', 'Q2', 'Q3', 'Q4'] # 计算每行的目标列总和(axis=1表示按行求和) row_sums = df1[target_cols].sum(axis=1) # 根据总和是否为0赋值INFO列 df1['INFO'] = np.where(row_sums == 0, 'not ok', 'ok')
方法二:用Pandasloc分步骤赋值
如果觉得numpy.where不够直观,也可以先统一赋值再修正,逻辑同样清晰:
# 先给所有行的INFO列设为'ok' df1['INFO'] = 'ok' # 找到总和为0的行,把它们的INFO改成'not ok' df1.loc[row_sums == 0, 'INFO'] = 'not ok'
额外提醒:浮点精度问题
如果你的实际数据存在浮点计算误差(比如不是像示例里这么规整的数值),直接用row_sums == 0可能会因为精度问题误判,这时候建议用np.isclose来判断是否接近0:
df1['INFO'] = np.where(np.isclose(row_sums, 0), 'not ok', 'ok')
内容的提问来源于stack exchange,提问作者toerag
相关产品推荐
相关产品推荐

