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

如何利用DataFrame列作为索引提取列表列元素并与其他列运算生成新列

问题描述

现有一个多列DataFrame,要用到其中三列:一列是不同长度的列表,另外两列都是单数值列。需求是生成新列,逻辑是用其中一列做列表列的索引,取出对应元素后和该行另一列的数值相乘。

样本数据示例:

  • df['actual']:1, 4, 3, 6, 4, 7, 2...
  • df['relative track']:2, 0, 1, 5, 3, 4...
  • df['weights']:[250,320,250,320], [250,250,500,500,250], [250,300,300]...

目前尝试的代码有问题,想把循环里的i换成relative_track列作为索引:

#Create relative weight variable
df['relative_weigth'] = df['weights'].map(lambda x: i*df['actual'] for i in x)
解决方法

你写的代码问题出在map只单独处理weights列,没法同时获取同一行的relative track和actual值。应该用apply方法,它能一次性访问整行的所有列数据:

正确代码

# 生成relative_weight列
df['relative_weight'] = df.apply(
    lambda row: row['weights'][row['relative track']] * row['actual'],
    axis=1
)

代码说明

  • axis=1参数指定按行处理每一条数据
  • 对每一行,先通过row['relative track']的数值作为索引,从row['weights']列表里取出对应元素
  • 再把取出的元素和同一行的row['actual']相乘,得到最终结果

额外提示

如果relative track的数值超过对应weights列表的索引范围(比如某行weights只有3个元素,但relative track是5),会触发索引错误。可以加个异常处理避免程序崩溃:

def calculate_relative_weight(row):
    try:
        return row['weights'][row['relative track']] * row['actual']
    except IndexError:
        return None  # 也可以返回0或者其他你需要的默认值

df['relative_weight'] = df.apply(calculate_relative_weight, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:35:28