Python for循环生成多组同尺寸DataFrame 如何计算对应位置元素标准差
实现方案
你不需要复杂的逻辑,以下是两种可直接落地的实现方式,都可以直接对应你原有代码调整:
方法1:基于numpy实现(推荐,性能更高)
把每次生成的DataFrame存入列表,再堆叠成三维数组后沿df计数维度计算标准差即可,代码如下:
import pandas as pd import numpy as np # 存储所有生成的DataFrame df_container = [] # 对应你原有的循环逻辑,生成5个5x5的DataFrame for i in range(5): current_df = pd.DataFrame(np.random.randint(0,100,size=(5, 5)), columns=[0,1,2,3,4]) df_container.append(current_df) # 沿第0维堆叠所有数组,堆叠后shape为(5,5,5),第一维对应不同的DataFrame stacked_arr = np.stack([df.values for df in df_container], axis=0) # 沿第一维(DataFrame计数维度)计算标准差,得到的就是对应位置的标准差结果 std_result_arr = stacked_arr.std(axis=0) # 转换为和原结构一致的DataFrame std_result_df = pd.DataFrame(std_result_arr, columns=df_container[0].columns, index=df_container[0].index) print(std_result_df)
方法2:基于MultiIndex实现(符合你之前的思路)
如果你想尝试MultiIndex的写法,可以用pd.concat带keys参数堆叠所有DataFrame后分组计算:
import pandas as pd import numpy as np df_container = [] for i in range(5): current_df = pd.DataFrame(np.random.randint(0,100,size=(5, 5)), columns=[0,1,2,3,4]) df_container.append(current_df) # 堆叠为MultiIndex结构,level=0是每个DataFrame的编号,level=1是原DataFrame的行索引 concat_multi_df = pd.concat(df_container, keys=range(len(df_container))) # 按原行索引分组,计算每一组同位置的标准差 std_result_df = concat_multi_df.groupby(level=1).std() print(std_result_df)
补充说明
- 两种方法输出结果完全一致,numpy方案对于你最大365个96x96的场景性能优势更明显,代码也更简洁。
- 如果需要计算样本标准差(除以n-1而非n),可以给
std方法加参数ddof=1即可,默认ddof=0是总体标准差。
内容的提问来源于stack exchange,提问作者StabMe
相关产品推荐
相关产品推荐

