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
相关产品推荐
相关产品推荐

