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

如何在Pandas中提取各行列表的独有元素并生成新列

在Pandas DataFrame中提取每行独有的列表元素

需求说明

给定一个每行存储列表数据的字典(可转为DataFrame),需要新增一列unique_values,其中每个元素是仅对应行存在、其他所有行均未出现的元素集合;若该行没有这类元素,则返回[None]。

输入示例

data = {
    'object_1': [1, 3, 4, 5, 77],
    'object_2': [1, 5, 100, 3, 4],
    'object_3': [1, 3, 4, 5, 5],
    'object_4': [1, 3, 5, 47, 48]
}

实现步骤及代码

  1. 导入依赖并构造DataFrame
    先将原始字典转为DataFrame,同时生成存储每行完整列表的elements列:

    import pandas as pd
    
    # 构造DataFrame,每行对应一个object
    df = pd.DataFrame.from_dict(data, orient='index', columns=['v1', 'v2', 'v3', 'v4', 'v5'])
    # 生成每行的元素列表
    df['elements'] = df.apply(lambda row: row.tolist(), axis=1)
    
  2. 统计元素的跨行出现次数
    统计每个元素在多少行中出现(同一行内重复元素只算一次):

    # 把每行元素转为集合,避免同一行重复元素干扰统计
    row_element_sets = df['elements'].apply(set)
    # 初始化统计字典
    element_row_count = {}
    for elem_set in row_element_sets:
        for elem in elem_set:
            element_row_count[elem] = element_row_count.get(elem, 0) + 1
    
  3. 提取每行独有的元素
    遍历每行,筛选出仅在该行出现的元素,若无则填充[None]:

    df['unique_values'] = df['elements'].apply(
        lambda lst: [elem for elem in set(lst) if element_row_count[elem] == 1] or [None]
    )
    
  4. 转换为示例格式的结果
    若需要转回原始字典格式:

    final_data = {}
    # 还原原始object对应的列表
    for idx, row in df.iterrows():
        final_data[idx] = row['elements']
    # 添加unique_values列
    final_data['unique_values'] = df['unique_values'].tolist()
    
    print(final_data)
    

输出结果

{
    'object_1': [1, 3, 4, 5, 77],
    'object_2': [1, 5, 100, 3, 4],
    'object_3': [1, 3, 4, 5, 5],
    'object_4': [1, 3, 5, 47, 48],
    'unique_values': [[77], [100], [None], [47, 48]]
}

内容的提问来源于stack exchange,提问作者Mr.Slow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:10:46