You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame中逐行遍历并每次针对两列完成标记操作?

解决方案

直接上可运行的代码,完全匹配你的需求:

import pandas as pd

cols_dict = {'matr': {0: '18I1', 1: '03I2', 2: '03I3', 3: '18I4', 4: '03I5', 5: '03I6', 6: '03I7', 7: '03I8', 8: '18I9', 9: '18I0'}, 'cat': {0: '3', 1: '3', 2: '3', 3: '3', 4: '3', 5: '18', 6: '3', 7: '3', 8: '3', 9: '3'}, 'Unnamed: 5': {0: 81, 1: 81, 2: 81, 3: 77, 4: None, 5: None, 6: 83, 7: 81, 8: 79, 9: 81}, 'Unnamed: 6': {0: 91, 1: 97, 2: 97, 3: 91, 4: None, 5: 93, 6: 89, 7: 83, 8: 81, 9: 99}, 'Unnamed: 7': {0: 117.0, 1: 115.0, 2: 115.0, 3: 115.0, 4: 115.0, 5: None, 6: 115.0, 7: 115.0, 8: 115.0, 9: 115.0}, 'Unnamed: 8': {0: 123.0, 1: 115.0, 2: 115.0, 3: 115.0, 4: 123.0, 5: 123.0, 6: 125.0, 7: 123.0, 8: 117.0, 9: None}}  

cols_df = pd.DataFrame.from_dict(cols_dict)

# 提取需要检查的数值列(排除首列matr和分类列cat)
target_cols = cols_df.columns[2:]

# 初始化标记列xs
cols_df['xs'] = None

# 将目标列统一转换为数值类型,非数值内容转为NaN
numeric_df = cols_df[target_cols].apply(pd.to_numeric, errors='coerce')

# 标记所有存在非数值的行
cols_df.loc[numeric_df.isna().any(axis=1), 'xs'] = 'X'

# 调整列顺序,匹配示例输出的结构
cols_out_df = cols_df[['matr', 'xs', 'cat'] + list(target_cols)]

# 查看结果
print(cols_out_df.to_dict())

关键步骤说明

  • 筛选目标列:我们只关注除matr(首列)和cat之外的数值列,这些是需要检查的对象。
  • 初始化标记列:先给xs列全部赋值为None,后续仅对符合条件的行进行修改。
  • 统一数值转换:用pd.to_numeric把所有目标列转为数值格式,原有的None或无法转成数字的内容会变成NaN,便于统一判断。
  • 标记非数值行:通过isna().any(axis=1)找出任意目标列存在非数值的行,给这些行的xs列赋值为'X'。
  • 调整列顺序:按照示例输出的列顺序重新排列DataFrame,确保xs列紧跟在matr之后。

运行代码后,得到的cols_out_df与你提供的期望输出完全一致。

内容的提问来源于stack exchange,提问作者Maya_Cent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:15:35