python - 将 n 个 DataFrame 按元素聚合为单个 DataFrame

标签 python pandas design-patterns

使用聚合函数组合其他几个 DataFrame 来生成 pandas DataFrame 的 pythonic 方法是什么? (DataFrame 的形状均相同, header 也相同。)

我可能感兴趣的聚合函数是平均值、最小值、最大值和采用两个操作数的用户定义函数。

例如,这是我生成一个 DataFrame (max) 的方式,它具有四个其他 DataFrame (df1,df2,df3,df4) 中的最大元素。这几乎不是一个可以应用于所有情况的模式(习语),并且计算平均值看起来会完全不同。

import pandas as pd

df1 = pd.DataFrame({'a' : [1,2,3], 'b': [3,9,5]})
df2 = pd.DataFrame({'a' : [6,2,7], 'b': [3,4,5]})
df3 = pd.DataFrame({'a' : [6,2,11], 'b': [3,4,5]})
df4 = pd.DataFrame({'a' : [6,2,7], 'b': [3,12,5]})
print(df1)
print(df2)
print(df3)
print(df4)

max1 = df1.where(df1 > df2, df2)
max2 = df3.where(df3 > df4, df4)
max = max1.where(max1 > max2, max2)
print(max)

下面是一个采用两个操作数的用户定义函数的示例,我也想应用它,它与本示例中的 max 基本相同,但在实践中会更复杂

def myagg(a, b):
    return a > b

最佳答案

pd.concat将它们全部连接起来,然后用groupby来查找max:

pd.concat([df1, df2, df3, df4], 1).groupby(level=0, axis=1).max()

    a   b
0   6   3
1   2  12
2  11   5

将此与您的方法进行比较,该方法也返回:

max

    a   b
0   6   3
1   2  12
2  11   5

请注意,每个数据帧的列名称必须相同才能使此方法(以及您当前的方法)发挥作用。

<小时/>

正如 piR 提到的,describe 函数为您执行一些常规聚合:

lodf = [df1, df2, df3, df4]

pd.concat(lodf, keys=range(len(lodf))) \
  .groupby(level=1).describe().swaplevel(0, 1, 1).sort_index(1)

    25%       50%       75%       count        max        mean        min  \
      a    b    a    b    a     b     a    b     a     b     a     b    a   
0  4.75  3.0  6.0  3.0  6.0  3.00   4.0  4.0   6.0   3.0  4.75  3.00  1.0   
1  2.00  4.0  2.0  6.5  2.0  9.75   4.0  4.0   2.0  12.0  2.00  7.25  2.0   
2  6.00  5.0  7.0  5.0  8.0  5.00   4.0  4.0  11.0   5.0  7.00  5.00  3.0   

             std            
     b         a         b  
0  3.0  2.500000  0.000000  
1  4.0  0.000000  3.947573  
2  5.0  3.265986  0.000000  

关于python - 将 n 个 DataFrame 按元素聚合为单个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47297104/

相关文章:

python - python如何用时间元素创建元组的元组?

python - Tensorflow per_process_gpu_memory_fraction 不工作

python - 如何合并 `pandas` 中的部分多索引

java - 允许根据变量值实例化类的特定变量

java - 尝试使其他包装类对复合类方法可见时,避免违反SOLID原则

python - 将Python代码的输出写入Excel中的多行

python - 如何从头开始构建具有可变属性的xml模板

python - 聚合 pandas 数据框和字符串条目

python - 基于 str.contains (或类似)跨数据框列进行计数

ios - 如何使用移动应用程序的模式设计软件