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

如何为含物品列表列的DataFrame新增匹配另一DataFrame的均值列?

实现方案

先看示例数据

先构造符合你描述的示例DataFrame,方便理解操作逻辑:

import pandas as pd

# df2:item为索引,存储物品对应数值
df2 = pd.DataFrame(
    {'value': [234, 2, 3]},
    index=['items1', 'items4', 'items2500']
)

# df1:包含物品列表的列
df1 = pd.DataFrame({
    'item_list': [["items1","items4","items2500"], ["items1", "items4"]]
})

情况1:df2的item列是索引

直接用apply遍历每行的物品列表,通过df2.loc匹配取值后计算均值:

df1['avg_value'] = df1['item_list'].apply(lambda x: df2.loc[x, 'value'].mean())

运行后df1会新增avg_value列,第一行值为(234+2+3)/3≈79.67,第二行是(234+2)/2=118。

情况2:df2的item列是普通列

如果item是普通列,先临时将其设为索引再操作更高效:

# 假设df2的item是普通列
df2 = pd.DataFrame({
    'item': ['items1', 'items4', 'items2500'],
    'value': [234, 2, 3]
})

# 临时转索引后计算均值
df1['avg_value'] = df1['item_list'].apply(
    lambda x: df2.set_index('item').loc[x, 'value'].mean()
)

处理列表中存在不存在的物品

如果你的物品列表里有df2中没有的条目,上面的代码会返回NaN。要是想忽略这些不存在的物品,只计算存在的均值,可以这么写:

df1['avg_value'] = df1['item_list'].apply(
    lambda x: df2.loc[df2.index.isin(x), 'value'].mean() if x else 0
)

这里用df2.index.isin(x)过滤出存在的物品,同时判断列表为空时返回0(你可以根据需求调整这个默认值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:35:19