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

如何遍历Pandas列中的嵌套列表并基于其值生成统计字典?

问题描述

我有如下DataFrame:

id        some_binary_col        some_amount_col        nested_lists
123       0                      100                    ['email_rule','phone_rule','score_rule']
456       1                      500                    ['address_rule','zip_rule']
121       1                      300                    ['zip_rule','phone_rule']
122       0                      100                    ['score_rule','phone_rule','new_rule']
133       1                      200                    ['email_rule','address_rule','zip_rule']

可复现代码:

import pandas as pd

ids = [123,456,121,122,133]
some_binary_col = [0,1,1,0,1]
some_amount_col = [100,500,300,100,200]
nested_lists = [
    ['email_rule','phone_rule','score_rule'],
    ['address_rule','zip_rule'],
    ['zip_rule','phone_rule'],
    ['score_rule','phone_rule','new_rule'],
    ['email_rule','address_rule','zip_rule']
]

df = pd.DataFrame()
df['id'] = ids
df['some_binary_col'] = some_binary_col
df['some_amount_col'] = some_amount_col
df['nested_lists'] = nested_lists

我想要生成一个字典,统计每个规则对应的some_binary_col值为1的次数,示例结果如下:

rule_binary_col_dict = {
    'email_rule': 1,
    'phone_rule': 1,
    'score_rule': 0,
    'address_rule': 2,
    'zip_rule': 3,
    'new_rule': 0
}

注:nested_lists列可能包含大量唯一列表和元素,我不太擅长处理嵌套列表的遍历,不知道如何在嵌套循环里结合条件完成统计。

解决方案

方法1:用Pandas的explode(最简洁)

利用explode把嵌套列表拆分成每行一个规则,筛选some_binary_col=1的行统计次数,最后补全所有规则的计数:

# 拆分嵌套列表,得到每行一个规则的DataFrame
exploded_df = df.explode('nested_lists')

# 统计some_binary_col=1时各规则的次数
counts = exploded_df[exploded_df['some_binary_col'] == 1]['nested_lists'].value_counts().to_dict()

# 获取所有唯一规则,补全计数为0的规则
all_rules = exploded_df['nested_lists'].unique()
rule_binary_col_dict = {rule: counts.get(rule, 0) for rule in all_rules}

print(rule_binary_col_dict)

输出结果:

{'email_rule': 1, 'phone_rule': 1, 'score_rule': 0, 'address_rule': 2, 'zip_rule': 3, 'new_rule': 0}

方法2:基础嵌套循环(适合理解底层逻辑)

先初始化所有规则的计数为0,再遍历符合条件的行累加计数:

rule_counts = {}

# 先初始化所有规则的计数为0
for rules in df['nested_lists']:
    for rule in rules:
        if rule not in rule_counts:
            rule_counts[rule] = 0

# 遍历每一行,当some_binary_col=1时,给对应规则计数+1
for idx, row in df.iterrows():
    if row['some_binary_col'] == 1:
        for rule in row['nested_lists']:
            rule_counts[rule] += 1

print(rule_counts)

方法3:高效统计(适合大数据量)

用collections.defaultdict避免重复判断规则是否存在,提升大数据量下的性能:

from collections import defaultdict

rule_counts = defaultdict(int)

# 先收集所有规则,初始化计数
for rules in df['nested_lists']:
    for rule in rules:
        rule_counts[rule] += 0  # 确保所有规则都在字典里

# 遍历符合条件的行,累加计数
for row in df[df['some_binary_col'] == 1].itertuples():
    for rule in row.nested_lists:
        rule_counts[rule] += 1

# 转成普通字典(可选)
rule_binary_col_dict = dict(rule_counts)
print(rule_binary_col_dict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:48:29