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

Python:统计DataFrame嵌套列表中'expert'和'user'数量并收集对应ID的解决方案求助

嘿,我来帮你搞定这个DataFrame的处理需求!看起来你之前尝试用字典处理没成功,没关系,我们用Pandas的自定义函数结合apply方法就能轻松实现目标。

步骤详解

首先,我们先把你的原始数据转换成Pandas DataFrame(如果你的数据已经是这个结构,这一步可以直接跳过):

import pandas as pd

# 原始数据
data = {
    'count_freq': [3, 2, 1],
    'nested_list': [
        [['58bcd029', 2, 'expert'], ['58bcd029', 2, 'user'], ['58bcd029', 2, 'expert']],
        [['58bcd029', 2, 'expert'], ['58bcd029', 2, 'expert']],
        [['1ee429fa', 1, 'expert']]
    ]
}
df = pd.DataFrame(data)

接下来,我们定义一个处理每行嵌套列表的函数,它会遍历嵌套列表里的每个元素,分别统计'expert'和'user'的数量,并收集对应的ID:

def process_role_data(nested_items):
    expert_ids = []
    user_ids = []
    # 遍历嵌套列表中的每一项
    for item in nested_items:
        item_id, _, role = item
        if role == 'expert':
            expert_ids.append(item_id)
        elif role == 'user':
            user_ids.append(item_id)
    # 返回统计结果
    return pd.Series([
        len(expert_ids),  # expert数量
        expert_ids,       # expert对应的ID列表
        len(user_ids),    # user数量
        user_ids          # user对应的ID列表
    ])

然后,我们把这个函数应用到DataFrame的nested_list列上,生成新的统计列,再和原DataFrame合并:

# 应用函数,生成统计列
stats_df = df['nested_list'].apply(process_role_data)
# 设置新列的名称
stats_df.columns = ['count_expert', 'ids', 'count_user', 'ids']
# 合并原DataFrame的count_freq列和统计结果
result_df = pd.concat([df[['count_freq']], stats_df], axis=1)

最后,查看结果:

print(result_df)

运行后得到的结果完全符合你的要求:

count_freqcount_expertidscount_userids
32['58bcd029','58bcd029']1['58bcd029']
22['58bcd029','58bcd029']0[]
11['1ee429fa']0[]

补充说明

这里需要注意:Pandas默认不鼓励重复列名,但按照你的需求我们保留了两个ids列。如果后续需要区分,可以把列名改成expert_ids和user_ids(只需要修改stats_df.columns的设置即可),这样会更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:54:05