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

如何对字典中多份DataFrame按行计算各列均值?

问题描述

需要计算字典中5个DataFrame(对应experiment1至experiment5)的均值,要求为每个DataFrame的V1、V2列分别得到3×1的均值向量(即5组实验中同一行的数值求平均)。

示例DataFrame结构:

dict_df[key]

    V1  V2  
0   5   10  
1   3   10  
2   4   16  

尝试过两种方式但均未成功:

  • 用循环计算对应行均值,但无法正确访问目标值
  • 执行代码 out=pd.concat(df_dict.values()).mean(level=0),报错信息:'numpy.ndarray' object is not callable

创建字典的代码如下:

dfs = {}

for (i, experiment) in enumerate(all_experiments):
    df = pd.read_fwf(experiment)
    df_ = pd.DataFrame(columns=['V1', 'V2'])
    df_['V1'] = torch.tensor(df['V1'].values, dtype=torch.float32)
    df_['V2'] = torch.tensor(-df['V2'].values, dtype=torch.float32)
 
    dfs[i] = df_

df_dict = pd.concat(dfs, sort=False)
解决方案

核心问题说明

你将pd.concat(dfs)的结果赋值给了df_dict,此时df_dict是一个多层索引(MultiIndex)的DataFrame,而非字典。df_dict.values()会返回numpy数组,这也是你之前执行pd.concat(df_dict.values())报错的原因。

高效计算方法

方法1:基于已生成的多层索引DataFrame计算

直接利用df_dict的第二层索引(行号)分组求均值:

# 按第二层索引(原始行号)分组,计算各列均值
mean_df = df_dict.groupby(level=1).mean()

执行后mean_df是一个3行2列的DataFrame,其中V1、V2列分别对应每行的均值向量,单独提取某一列(如mean_df['V1'])就是你需要的3×1均值向量。

方法2:保留字典结构直接计算

如果不想提前拼接成多层索引DataFrame,可直接对字典内的DataFrame做对齐拼接后计算:

# 将字典中所有DataFrame按行索引对齐拼接
combined_df = pd.concat(dfs.values(), axis=0, keys=range(len(dfs)))
# 按原始行号分组求均值
mean_df = combined_df.groupby(level=1).mean()

优化建议

创建DataFrame时无需先转成torch.tensor,直接用pandas的类型转换更高效:

df_['V1'] = df['V1'].astype('float32')
df_['V2'] = (-df['V2']).astype('float32')

若后续需要用PyTorch处理,再将结果转成tensor即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:08:10