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

Python:筛选同时含Sell与Not Sell动作的公司分组报错解决

筛选同时包含两种动作的公司数据

原始DataFrame中,每家公司对应Sell、Not Sell两种动作之一,或同时存在两种动作。需求是保留同时具备两种动作的公司数据,删除仅有一种动作的公司数据。

尝试代码与报错

用户尝试通过分组筛选实现需求,代码如下:

sell=['Sell','Not Sell']
df['Action'].str.contains(sell).groupby([df['Date'],df['Company']]).transform('any')

运行后报错:'unhashable type: 'list''

问题原因

str.contains()方法仅支持传入字符串或正则表达式作为匹配规则,无法直接接收列表参数;且原代码的逻辑方向有误——我们需要检查的是分组后每组是否同时包含两种动作,而非每行是否匹配列表中的字符串。

解决方案

以下两种方法均可实现需求:

方法一:检查分组动作集合是否包含全部目标动作

# 定义需要同时存在的动作集合
required_actions = {'Sell', 'Not Sell'}

# 按Date和Company分组,检查每组的动作集合是否包含所有目标动作
mask = df.groupby(['Date', 'Company'])['Action'].transform(lambda x: required_actions.issubset(x.unique()))

# 筛选符合条件的数据行
filtered_df = df[mask]

方法二:统计分组内唯一动作的数量

# 按Date和Company分组,统计每组的唯一动作数量是否等于2
mask = df.groupby(['Date', 'Company'])['Action'].transform(lambda x: x.nunique() == 2)

# 筛选符合条件的数据行
filtered_df = df[mask]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:52:19