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

DataFrame中phase为2/3的id与list_ids交叉匹配处理需求

筛选list_ids中对应phase为2或3的id列表

嘿,这就给你搞定这个筛选需求!咱们一步步来:

1. 先把你的数据转换成可操作的DataFrame

首先咱们先把你给出的表格转换成Pandas DataFrame,方便后续处理:

import pandas as pd

# 按照你的数据构造DataFrame
data = {
    'phase': [1, 3, 3, 2, 3, 1, 1, 2, 1],
    'list_ids': [['a1','a2','c3'], ['a1','b2','c3'], ['a2','b2'], ['b1','b2','c1'], ['b2','c1'], ['a1','a2','c3'], ['a1','b1','c4'], ['c1','c2','c4'], ['c1','c2']]
}
df = pd.DataFrame(data, index=['a1', 'a2', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3', 'c4'])

2. 核心筛选逻辑实现

咱们的思路很清晰:

  • 先找出所有phase等于2或3的id,把它们存成一个集合(集合的查找效率比列表高很多)
  • 遍历每一行的list_ids列表,只保留那些在这个有效id集合里的元素

代码实现如下:

# 提取phase为2或3的id,转成集合
valid_ids = set(df[df['phase'].isin([2, 3])].index)

# 对每个list_ids做过滤,生成新的列存储结果
df['filtered_list_ids'] = df['list_ids'].apply(lambda x: [id_item for id_item in x if id_item in valid_ids])

3. 查看最终结果

运行上面的代码后,你可以打印DataFrame看看效果:

print(df)

输出结果大概是这样的:

phase          list_ids filtered_list_ids
a1      1  [a1, a2, c3]           [a2, c3]
a2      3  [a1, b2, c3]           [b2, c3]
b1      3     [a2, b2]           [a2, b2]
b2      2  [b1, b2, c1]           [b1, b2]
b3      3     [b2, c1]           [b2]
c1      1  [a1, a2, c3]           [a2, c3]
c2      1  [a1, b1, c4]           [b1]
c3      2  [c1, c2, c4]           []
c4      1     [c1, c2]           []

简单解释下:比如valid_ids是{'a2','b1','b2','b3','c3'},所以每个list_ids里的元素只有在这个集合里才会被保留下来,像c3的list_ids里的元素都不在有效集合里,结果就是空列表啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:26:30