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

如何为含嵌套列表的DataFrame列新增统计元素出现次数总和的列

嘿,针对你这个包含嵌套列表的大型DataFrame,我来分享几个实用的解决方案,帮你快速新增统计各类元素(D/C/S)出现次数的列!

先明确需求

你的value列里每个元素是嵌套列表,每个子列表格式是[起始值, 结束值, 类型],我们需要统计每行里D、C、S各自出现的次数,新增一列(或多列)来存储这些统计结果。

方法一:基础实现(适合快速验证)

首先要注意:CSV文件里的嵌套列表其实是字符串格式,所以第一步得把它转换成真正的Python列表对象,然后再统计。

import pandas as pd
from ast import literal_eval
from collections import Counter

# 读取你的CSV文件(替换成你的文件名)
df = pd.read_csv("your_data.csv")

# 将字符串形式的列表转换为实际列表(安全替代eval())
df["value"] = df["value"].apply(literal_eval)

# 定义统计函数:遍历每行的嵌套列表,统计各类型次数
def count_type_occurrences(nested_list):
    # 提取所有子列表的第三个元素(类型)
    types = [item[2] for item in nested_list]
    # 用Counter计数并转为字典格式
    return dict(Counter(types))

# 新增type_counts列,存储每行的类型计数字典
df["type_counts"] = df["value"].apply(count_type_occurrences)

运行后,type_counts列会是这样的格式:{"D":2, "C":3, "S":4},清晰展示每行各类型的出现次数。如果需要把每个类型拆成单独列(比如D_count、C_count),可以加这一步:

# 将字典列展开为单独的计数列,空值补0并转为整数
df = df.join(pd.json_normalize(df["type_counts"]).fillna(0).astype(int))

方法二:高效优化版(适合12k+行的大型数据集)

上面的apply是逐行处理,数据量大时速度会慢。我们可以用Pandas的矢量化操作来提速:

import pandas as pd
from ast import literal_eval

df = pd.read_csv("your_data.csv")
df["value"] = df["value"].apply(literal_eval)

# 1. 将嵌套列表拆分成多行(每行对应一个子列表)
exploded_df = df.explode("value")

# 2. 提取每个子列表的类型
exploded_df["type"] = exploded_df["value"].str[2]

# 3. 按原行索引分组,统计各类型的出现次数
counts_df = exploded_df.groupby(exploded_df.index)["type"].value_counts().unstack(fill_value=0)

# 4. 给计数列加后缀,合并回原DataFrame
df = df.join(counts_df.add_suffix("_count"))

这个方法利用Pandas的内置分组统计功能,比逐行apply快很多,适合你的12k+行数据集。

示例输出

假设原DataFrame某行的value是[[1,92,"D"],[93,93,"C"],[94,113,"S"]],新增列后会得到:

  • type_counts: {"D":1, "C":1, "S":1}
  • 或者单独列:D_count=1, C_count=1, S_count=1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:14:03