使用聚合函数生成pandas DataFrame以组合其他几个DataFrame的pythonic方法是什么? (DataFrames具有相同的标题,具有相同的标题。)
我可能感兴趣的聚合函数是使用两个操作数的均值,最小值,最大值和用户定义的函数。
例如,这是我生成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
答案 0 :(得分:2)
将它们全部与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