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

如何获取DataFrame某列中数组的最大值并追加至原数据框?

解决DataFrame中列表列的最大值计算并添加新列问题

问题分析

你原来的代码有几个关键问题导致无法正常工作:

  • 遍历DataFrame的方式错误:for line in df实际上是遍历DataFrame的列名(也就是a和b),而不是每一行数据,所以你根本无法获取到每行的b列列表。
  • 错误处理b列数据:你的b列已经是Python列表类型,不需要用split(',')去分割字符串,也不需要转成float(列表里的元素已经是整数)。
  • 没有将计算出的最大值写入原DataFrame,只是打印结果。

正确解决方案

我们可以用Pandas的内置方法高效处理每行的列表,计算最大值并添加为新列max_val,这里给你两种常用方案:

方法1:直观的apply写法

这是最容易理解的方式,直接针对b列的每个列表计算最大值:

import pandas as pd

# 先构造你的示例DataFrame(如果已有可跳过)
data = {
    'a': ['loc.1', 'loc.2', 'loc.3'],
    'b': [[1, 2, 3, 4, 7, 5, 6], [3, 4, 3, 7, 7, 8, 6], [1, 4, 3, 1, 7, 8, 6]]
}
df = pd.DataFrame(data)

# 计算每个列表的最大值并添加新列
df['max_val'] = df['b'].apply(lambda x: max(x))

print(df)

运行后会得到你想要的输出:

a                     b  max_val
0  loc.1  [1, 2, 3, 4, 7, 5, 6]        7
1  loc.2  [3, 4, 3, 7, 7, 8, 6]        8
2  loc.3  [1, 4, 3, 1, 7, 8, 6]        8

方法2:大数据集更高效的矢量化写法

如果你的DataFrame数据量很大,apply的性能可能不够理想,我们可以用矢量化操作来提速:

df['max_val'] = pd.DataFrame(df['b'].tolist()).max(axis=1)

这种方式把列表列展开成临时DataFrame,再直接计算每行的最大值,性能比apply更优。

再拆解原代码的问题

顺便帮你理清楚原代码的逻辑错误:

  • 如果你想遍历每行数据,应该用for idx, row in df.iterrows(),这样row['b']就能拿到每行的列表。
  • 拿到列表后直接调用max(row['b'])就可以得到最大值,完全不需要split和map(float)的操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:04