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

Pandas筛选指定Category Type的Receipt ID及交集ID

问题解决:筛选包含指定类别的Receipt ID

先修正你获取Food类去重Receipt ID的方法

你的两种方法都存在问题:

  • 方法一错误原因:query语句里的字符串值需要加单引号,否则Python会把Food当成变量而非字符串常量,修正后代码:
df1 = df.query("Category Type == 'Food'")['Receipt ID'].unique()

或者用更直观的布尔索引写法:

df1 = df[df['Category Type'] == 'Food']['Receipt ID'].unique()
  • 方法二错误原因:逻辑完全偏差,把Category Type设为索引后,用eq('Food')去对比Receipt ID列(都是数字),结果全是False,自然返回空列表,这个思路没必要采用。

最终目标:找到同时包含Food和Drink的Receipt ID

这里提供两种高效的实现方式:

方法一:分组后检查类别集合

通过分组收集每个Receipt ID对应的所有类别,再筛选同时包含两个目标类别的ID:

import pandas as pd

# 读取CSV文件(假设你已完成这一步)
df = pd.read_csv('your_file.csv')

# 按Receipt ID分组,将每个组的Category Type转为集合
category_groups = df.groupby('Receipt ID')['Category Type'].apply(set)

# 筛选出同时包含Food和Drink的Receipt ID
target_ids = category_groups[category_groups >= {'Food', 'Drink'}].index.tolist()
print(target_ids)  # 输出: [135135, 169071]

方法二:交叉表统计筛选

用交叉表统计每个Receipt ID下各类别的出现次数,再筛选两类都有记录的ID:

import pandas as pd

df = pd.read_csv('your_file.csv')

# 生成交叉表,行是Receipt ID,列是Category Type,值为出现次数
count_table = pd.crosstab(df['Receipt ID'], df['Category Type'])

# 筛选Food和Drink计数都大于0的ID
target_ids = count_table[(count_table['Food'] > 0) & (count_table['Drink'] > 0)].index.tolist()
print(target_ids)  # 输出: [135135, 169071]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:57:36