如何从单行panda df中检索值等于指定值的对应列名
检索单行DataFrame中指定值对应列名的实现方法
针对仅1行、1700列的DataFrame场景,不需要做全表扫描,直接提取唯一行做判断即可,以下是可直接复用的方案:
最简写法(确定目标值一定存在时用)
题目明确值10一定存在于某一列,直接用布尔索引即可,运行效率最高:
# 取df的第一行(位置索引为0),匹配值等于10的列 target_column_name = df.columns[df.iloc[0] == 10][0]
逻辑说明:
df.iloc[0]会提取第一行的所有值,返回索引为原列名的Series结构df.iloc[0] == 10会逐列判断值是否等于10,返回与列等长的布尔序列- 用布尔序列索引
df.columns即可筛选出匹配的列名,因为确定有且仅有一个匹配值,直接取索引0的结果即可
鲁棒性写法(不确定目标值是否存在时用)
如果后续场景变化可能出现值不存在的情况,可以先转列表做判空,避免索引越界报错:
match_columns = df.columns[df.iloc[0] == 10].tolist() if match_columns: target_column_name = match_columns[0] print(f"匹配到的列名为:{target_column_name}") else: print("当前行中不存在值为10的列")
等价写法
用pandas内置的等值判断方法eq(),和第一种写法逻辑完全一致,可读性更强:
target_column_name = df.columns[df.iloc[0].eq(10)][0]
针对1700列的规模,以上写法的运行耗时都在毫秒级,完全不需要额外做性能优化。
内容的提问来源于stack exchange,提问作者Dat21
相关产品推荐
相关产品推荐

