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

多嵌套列表共有元素数值百分比变化计算及Pandas优化方案

用Pandas高效处理嵌套列表的公共元素百分比变化计算

针对你的问题,用Pandas的向量化操作可以大幅提升效率,比手动遍历快得多,具体实现步骤如下:

步骤1:导入Pandas并转换数据格式

先把嵌套列表转换成Pandas的DataFrame,让字符串首元素作为索引,每个子列表对应一列数值:

import pandas as pd

really_big_list = [
    [["A",1], ["B",2], ["C",3]], 
    [["A",2], ["G",2], ["C", 5]], 
    [["A", 2], ["B", 5], ["D", 3]]
]

# 将每个子列表转为Series,索引为字符串首元素,值为对应数值
series_list = []
for sublist in really_big_list:
    # 拆分每个子列表的键和值
    keys = [item[0] for item in sublist]
    values = [item[1] for item in sublist]
    series_list.append(pd.Series(values, index=keys))

# 合并所有Series为DataFrame,列对应原嵌套列表的层级
df = pd.concat(series_list, axis=1)

步骤2:筛选所有子列表共有的元素

DataFrame中缺失值代表该元素在对应子列表中不存在,直接用dropna()筛选出无缺失值的行(即所有子列表都存在的元素):

# 筛选公共元素
common_elements = df.dropna()

示例数据中,公共元素只有"A",得到的common_elements如下:

0    1    2
A  1.0  2.0  2.0

步骤3:计算百分比变化

Pandas内置了pct_change()方法可以直接计算变化率,也可以手动计算相对于基准的百分比变化:

方式1:计算相邻子列表间的百分比变化

# 按列计算相邻变化率,结果为小数(如1.0代表100%)
pct_changes = common_elements.pct_change(axis=1)

示例结果:

0    1    2
A   NaN  1.0  0.0

NaN是因为第一列没有前序数据,1.0代表从第一个子列表到第二个子列表数值翻倍(100%增长),0.0代表第二个到第三个子列表数值无变化。

方式2:以第一个子列表为基准计算百分比变化

如果需要统一以第一个子列表的数值为基准,直接做除法运算:

# 计算相对于第一个子列表的百分比变化,转为百分比形式
base_pct_changes = (common_elements / common_elements.iloc[:, 0] - 1) * 100

示例结果:

0      1      2
A   0.0  100.0  100.0

代表"A"在第二个子列表中比第一个增长100%,第三个和第一个相比同样增长100%。

效率优势

Pandas的核心操作都是底层C实现的向量化运算,避免了Python循环的开销,数据量越大,和手动遍历的效率差距越明显,处理百万级数据也能快速完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:00:55