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

如何在Pandas中对含列表的列计算sqrt(x²+y²)?

解决Pandas中列元素为列表时的逐元素模长计算问题

先模拟你的场景,创建示例DataFrame:

import pandas as pd
import numpy as np

# 模拟分组后得到的DataFrame,x、y列每个元素都是列表
df = pd.DataFrame({
    'x': [[1,2,3], [4,5,6]],
    'y': [[4,5,6], [7,8,9]]
})

方法一:逐行apply处理(简洁直观)

直接对每行的x、y列表做元素配对计算,返回结果列表作为新列值:

df['result'] = df.apply(lambda row: [np.sqrt(a**2 + b**2) for a, b in zip(row['x'], row['y'])], axis=1)

这里axis=1指定按行处理,row['x']和row['y']取到当前行的两个列表,用zip逐元素配对后计算模长。

方法二:展开后计算再聚合(适合需查看中间元素)

如果需要单独查看每个(x,y)对的计算结果,可以先展开列,计算后再聚合回原结构:

# 展开x、y列,每个列表元素单独成一行
df_exploded = df.explode(['x', 'y'], ignore_index=True)
# 确保数值类型(若分组后元素是字符串需转换)
df_exploded[['x', 'y']] = df_exploded[['x', 'y']].astype(float)
# 计算模长
df_exploded['result'] = np.sqrt(df_exploded['x']**2 + df_exploded['y']**2)
# 按原行分组,将结果聚合回列表
df['result'] = df_exploded.groupby(df_exploded.index // len(df.iloc[0]['x']))['result'].agg(list)

方法三:Numpy数组广播(高效处理大数据)

利用Numpy的向量化运算提升效率,适合数据量较大的场景:

# 将列中的列表转换为二维Numpy数组
x_arr = np.array(df['x'].tolist())
y_arr = np.array(df['y'].tolist())
# 向量化计算模长
result_arr = np.sqrt(x_arr**2 + y_arr**2)
# 将结果数组转回列表,赋值给新列
df['result'] = result_arr.tolist()

说明你之前失败的原因

直接对df['x'].tolist()和df['y'].tolist()用zip,得到的是每行的两个列表配对(比如第一对是[1,2,3]和[4,5,6]),而非列表内部的元素配对。必须在每行内部对两个列表做zip,这也是上述方法的核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:55:50