如何基于DataFrame行内集合元素判断并新增Package列?
解决思路:根据集合匹配规则新增Package列
首先明确你的需求:基于DataFrame中Item列的集合值,匹配预设规则生成对应的Package列。以下是两种实用的实现方案:
原始数据与匹配规则
先还原你的初始DataFrame:
import pandas as pd ex_df = pd.DataFrame({'ID': {0: 1, 1: 2, 2: 3, 3: 4}, 'Item': {0: {1}, 1: {1, 2}, 2: {1, 3, 4}, 3: {1, 3}}})
匹配规则:
- Package1:集合为
{1} - Package2:集合为
{1, 2} - Package3:集合为
{1, 3, 4} - Package4:集合为
{1, 3}
方法1:字典映射(高效简洁)
直接创建集合到Package名称的映射字典,利用pandas的map方法快速生成新列,这是效率最高的方案:
# 定义集合到Package的映射关系 package_map = { {1}: 'Package1', {1, 2}: 'Package2', {1, 3, 4}: 'Package3', {1, 3}: 'Package4' } # 新增Package列 ex_df['Package'] = ex_df['Item'].map(package_map)
方法2:自定义函数+apply(灵活适配复杂规则)
如果后续规则需要调整(比如增加模糊匹配、异常值处理),可以用自定义函数结合apply实现:
def match_package(item_set): if item_set == {1}: return 'Package1' elif item_set == {1, 2}: return 'Package2' elif item_set == {1, 3, 4}: return 'Package3' elif item_set == {1, 3}: return 'Package4' else: return 'Unknown' # 处理未匹配到规则的情况 ex_df['Package'] = ex_df['Item'].apply(match_package)
验证结果
执行上述任意方案后,查看最终DataFrame:
print(ex_df)
输出与你期望的结果完全一致:
ID Item Package 0 1 {1} Package1 1 2 {1, 2} Package2 2 3 {1, 3, 4} Package3 3 4 {1, 3} Package4
内容的提问来源于stack exchange,提问作者keo
相关产品推荐
相关产品推荐

