如何使用Pandas DataFrame实现多个矩阵(DataFrame)求和?
嘿,我来帮你理清这个问题!
解决多个矩阵DataFrame求和的问题
一、无需循环的多DataFrame矩阵求和方法
你不需要手动写循环来逐个相加,有几种简洁的方式可以实现多个矩阵DataFrame对应位置元素的求和:
方法1:用functools.reduce结合add
把所有要相加的DataFrame放到一个列表里,然后用reduce把add方法批量应用到整个列表上,fill_value=0还能处理可能存在的索引/列不匹配的情况(不过你的矩阵应该是结构一致的):
from functools import reduce import pandas as pd # 假设你的原始DataFrame列表是dfs = [df1, df2, df3, ...] total_df = reduce(lambda x, y: x.add(y, fill_value=0), dfs)
方法2:借助NumPy数组求和
如果所有DataFrame的索引和列完全一致,可以先把它们转成NumPy数组,求和后再转回DataFrame,这种方式效率也很高:
import numpy as np import pandas as pd dfs = [df1, df2, df3, ...] sum_array = np.sum([df.values for df in dfs], axis=0) total_df = pd.DataFrame(sum_array, index=dfs[0].index, columns=dfs[0].columns)
二、为什么my_df.sum()会得到混乱结果?
你之前用pd.concat([df1, df2, df3, ...])得到的my_df,本质是把多个矩阵按行堆叠(默认axis=0),相当于把每个矩阵的所有行都接在一起,变成一个行数是所有原始DataFrame行数总和的大表。
这时候调用my_df.sum(),默认是按列对所有行的元素求和,得到的是每一列所有行的累加值,而不是你想要的「多个矩阵对应位置元素相加」的结果,所以看起来混乱。
比如,假设每个原始df是2行2列的矩阵,concat后my_df是6行2列,sum()会得到2个值(每列的总和),而不是一个2行2列的求和矩阵。
内容的提问来源于stack exchange,提问作者catris25
相关产品推荐
相关产品推荐

