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

Python pandas:判断df2元素是否在df.columns中并返回单元格索引

问题分析与解决

首先,你的代码存在几个明显问题:

  • 语法错误:range(len(df2): 缺少右括号,应为 range(len(df2))
  • DataFrame索引错误:不能直接用 df2[i,j] 访问元素,需用 df2.iloc[i,j](按位置索引)
  • 逻辑错误:df[col] 是df的一整列(Series对象),和单个元素直接比较会返回布尔Series,无法作为if的判断条件
  • 大小写错误:Python中打印函数是print(),不是Print()

接下来分两种场景给出解决方案:

场景1:严格按你的需求——判断df2元素是否存在于df.columns中

你的df默认列名是[0,1,2],df2的元素是p和a,显然都不在列名里,但可以用以下代码实现逻辑:

import pandas as pd

df = pd.DataFrame(
    [['p','r','c'],
     ['o','k','a']])
df2 = pd.DataFrame(
    [['p'],
     ['a']])

# 遍历df2的每个元素,记录其在df2中的位置
for i in range(len(df2)):
    for j in range(len(df2.columns)):
        val = df2.iloc[i,j]
        if val in df.columns:
            print(f"元素{val}在df.columns中,df2中的位置是({i},{j})")
        else:
            print(f"元素{val}不在df.columns中,df2中的位置是({i},{j})")

运行结果会输出两次“不在”,因为df的列名是数字,和df2的字符串元素不匹配。

场景2:更合理的实际需求——判断df2元素是否存在于df的单元格中,返回该元素在df中的行、列索引

如果你的真实需求是找df2元素在df中的位置,代码如下:

import pandas as pd

df = pd.DataFrame(
    [['p','r','c'],
     ['o','k','a']])
df2 = pd.DataFrame(
    [['p'],
     ['a']])

# 先获取df中所有元素的位置映射
element_positions = {}
for row_idx, row in df.iterrows():
    for col_idx, val in row.items():
        if val not in element_positions:
            element_positions[val] = []
        element_positions[val].append((row_idx, col_idx))

# 遍历df2元素,查找位置
for i in range(len(df2)):
    for j in range(len(df2.columns)):
        val = df2.iloc[i,j]
        if val in element_positions:
            print(f"元素{val}在df中的位置是{element_positions[val]},df2中的位置是({i},{j})")
        else:
            print(f"元素{val}未在df中找到,df2中的位置是({i},{j})")

运行结果:

元素p在df中的位置是[(0, 0)],df2中的位置是(0,0)
元素a在df中的位置是[(1, 2)],df2中的位置是(1,0)

额外优化:更简洁的pandas风格实现

如果想避免嵌套循环,用pandas的内置方法更高效:

import pandas as pd

df = pd.DataFrame(
    [['p','r','c'],
     ['o','k','a']])
df2 = pd.DataFrame(
    [['p'],
     ['a']])

# 将df转为长格式,记录每个元素的位置
df_long = df.stack().reset_index()
df_long.columns = ['row', 'col', 'value']

# 遍历df2元素匹配
for val in df2.values.flatten():
    matches = df_long[df_long['value'] == val]
    if not matches.empty:
        positions = list(zip(matches['row'], matches['col']))
        print(f"元素{val}在df中的位置:{positions}")
    else:
        print(f"元素{val}未在df中找到")

运行结果和场景2一致,且代码更符合pandas的使用习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:36:28