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

Pandas指定行内比较列值并提取符合条件的列名

实现步骤

1. 提取目标行

你已经掌握df.loc筛选方法的话可以直接使用,也可以用如下写法适配第一列按位置筛选的场景,自动转成一维Series方便后续处理:

# 替换字符串x为你实际的筛选值
target_row = df[df.iloc[:, 0] == 'x'].squeeze()

注:如果筛选结果可能有多行,你可以提前用df[df.iloc[:, 0] == 'x'].shape[0]确认行数符合唯一行的预期,避免squeeze()转换出错。

2. 提取符合条件的列名

直接对目标行Series做元素级判断,生成布尔掩码后过滤索引即可:

# 替换y为你实际的阈值
# 条件1:值为整数(兼容pandas、numpy内置整数类型)
# 条件2:值小于阈值y
mask = target_row.apply(lambda val: pd.api.types.is_integer(val) and val < y)

# 提取符合条件的列名,转为列表格式
qualified_cols = target_row[mask].index.tolist()

如果你需要筛选出值唯一的单元格对应的列名(即多个列符合条件但值相同时只保留一个),可以调整最后一步为:

qualified_cols = target_row[mask].drop_duplicates().index.tolist()

示例验证

我们用测试数据验证效果:

import pandas as pd
# 构造测试DataFrame
df = pd.DataFrame([
    ['x', 3, 5.5, 12, 'test', -2],
    ['z', 7, 8, 9, 10, 11]
], columns=['col1', 'col2', 'col3', 'col4', 'col5', 'col6'])
y = 10

# 执行操作
target_row = df[df.iloc[:, 0] == 'x'].squeeze()
mask = target_row.apply(lambda val: pd.api.types.is_integer(val) and val < y)
qualified_cols = target_row[mask].index.tolist()
print(qualified_cols)

运行输出为['col2', 'col6'],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:04