如何筛选Q=1且haul为corto的DataFrame数据并处理对应em列?
解决方案
步骤1:筛选Q=1的数据行
先把DataFrame过滤到仅保留Q=1的记录:
# 假设你的DataFrame名为df df_q1 = df[df['Q'] == 1].copy() # 用copy避免SettingWithCopyWarning
步骤2:批量将非corto对应的em字段设为NaN
因为haul1对应em1、haul2对应em2……以此类推,我们可以循环处理每一组对应字段,把haul值不等于corto的行,对应的em列设为NaN:
# 遍历1到5的索引,配对haul和em字段 for i in range(1, 6): haul_col = f'haul{i}' em_col = f'em{i}' # 定位haul值不是corto的行,把对应em设为NaN df_q1.loc[df_q1[haul_col] != 'corto', em_col] = float('nan')
步骤3:对em列求和
现在可以直接对em列按行求和,skipna=True会自动忽略NaN值:
df_q1['em_total'] = df_q1[['em1', 'em2', 'em3', 'em4', 'em5']].sum(axis=1, skipna=True)
为什么你之前的方法没生效?
你提到用.loc结合不等运算符只得到全为corto的行,应该是错误地用过滤行的方式(比如df.loc[df[haul_cols] == 'corto']),而不是定位行后修改对应em列的值。上面的方法是先保留所有Q=1的行,再针对每一组haul/em,把不符合条件的em值置空,而不是删除行。
内容的提问来源于stack exchange,提问作者Javier Salvador
相关产品推荐
相关产品推荐

