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

如何检查Pandas DataFrame中A列字符串是否在同行B列列表中

解决Pandas逐行检查字符串是否在同行列表中的问题

首先,你遇到的TypeError: unhashable type: 'list'是因为Series.isin()方法的设计目标是检查整个Series的元素是否存在于一个可哈希的集合或一维序列中,而你传入的df.B是包含列表的Series——列表是不可哈希的类型,所以会触发这个错误。

下面提供一个完全基于Pandas原生功能、无需for循环和lambda的解决方案:

import pandas as pd

# 构造你的DataFrame
df = pd.DataFrame(columns=['A','B'])
df.loc[0] = ['apple',['orange','banana','blueberry']]
df.loc[1] = ['orange',['orange','banana','avocado']]
df.loc[2] = ['blueberry',['apple','banana','blueberry']]
df.loc[3] = ['cherry',['apple','orange','banana']]

# 核心解决方案
result = df['A'].eq(df['B'].explode()).groupby(level=0).any()
print(result)

输出结果:

0    False
1     True
2     True
3    False
Name: A, dtype: bool

方法原理:

  1. df['B'].explode():将每行的列表拆分成单独的行,同时保留原DataFrame的索引,这样原来的一行(比如索引0)会变成3行,分别对应orange、banana、blueberry,索引都是0。
  2. df['A'].eq(...):利用索引对齐的特性,将原A列的每个值(比如索引0的apple)和拆分后对应索引的所有B元素逐一比较,得到一个布尔值Series。
  3. groupby(level=0).any():按原索引分组,判断每组中是否存在至少一个True——也就是原行的A值是否出现在B的列表中,最终得到你需要的逐行判断结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:34