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_freq | count_expert | ids | count_user | ids |
|---|---|---|---|---|
| 3 | 2 | ['58bcd029','58bcd029'] | 1 | ['58bcd029'] |
| 2 | 2 | ['58bcd029','58bcd029'] | 0 | [] |
| 1 | 1 | ['1ee429fa'] | 0 | [] |
补充说明
这里需要注意:Pandas默认不鼓励重复列名,但按照你的需求我们保留了两个ids列。如果后续需要区分,可以把列名改成expert_ids和user_ids(只需要修改stats_df.columns的设置即可),这样会更规范。
内容的提问来源于stack exchange,提问作者Ajinkya Mishrikotkar
相关产品推荐
相关产品推荐

