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

Python中按组计算聚合方差报错ValueError,求解决方案

解决按group计算vector列聚合方差的问题

错误原因

pandas内置的var聚合函数无法直接处理嵌套列表类型的列,它不知道如何对列表中的元素维度进行方差计算,因此抛出ValueError: no results。

解决方案

可以通过两种方式实现需求:

方法1:展开列表列后分组计算

先将嵌套列表形式的vector列展开为多列数值型DataFrame,结合group列分组后计算各维度方差,最后可将结果合并回列表形式:

import pandas as pd

df = pd.DataFrame({'user': ['user_1', 'user_2', 'user_3', 'user_4', 'user_5',  'user_6'], 
                   'vector': [[1, 0, 2, 0], [1, 8, 0, 2],[6, 2, 0, 0], [5, 0, 2, 2], [3, 8, 0, 0],[6, 0, 0, 2]], 
                   'group': ['A', 'B', 'C', 'B', 'A', 'A']})

# 展开vector列为多列
vector_cols = pd.DataFrame(df['vector'].tolist(), index=df.index)
# 合并group列与展开后的数值列
combined_df = pd.concat([df['group'], vector_cols], axis=1)

# 按group分组计算各维度方差
grouped_var = combined_df.groupby('group').var().reset_index()
# 将多列方差合并为列表形式
grouped_var['vector'] = grouped_var.iloc[:, 1:].values.tolist()

# 保留最终需要的列
aggregated_variance = grouped_var[['group', 'vector']]
print(aggregated_variance)

方法2:利用numpy直接计算(更简洁)

借助numpy的var函数直接处理分组后的二维数组,指定axis=0计算每个特征维度的方差:

import pandas as pd
import numpy as np

df = pd.DataFrame({'user': ['user_1', 'user_2', 'user_3', 'user_4', 'user_5',  'user_6'], 
                   'vector': [[1, 0, 2, 0], [1, 8, 0, 2],[6, 2, 0, 0], [5, 0, 2, 2], [3, 8, 0, 0],[6, 0, 0, 2]], 
                   'group': ['A', 'B', 'C', 'B', 'A', 'A']})

aggregated_variance = df.groupby('group', as_index=False)['vector'].apply(
    lambda x: np.var(x.tolist(), axis=0).tolist()
).rename('vector').reset_index()
print(aggregated_variance)

结果说明

两种方法都会得到如下结果(group C仅1个样本,方差无意义显示为nan,可根据需求用fillna(0)处理):

groupvector
A[6.333333333333333, 32.0, 1.3333333333333333, 1.3333333333333333]
B[8.0, 32.0, 2.0, 0.0]
C[nan, nan, nan, nan]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:20:31