Python 按元素将n个数据帧聚合为单个数据帧
使用聚合函数组合其他几个数据帧来生成熊猫数据帧的pythonic方法是什么?(数据帧都是具有相同标题的相同形状。) 我可能感兴趣的聚合函数是平均值、最小值、最大值和使用两个操作数的用户定义函数 例如,这是我生成数据帧(Python 按元素将n个数据帧聚合为单个数据帧,python,pandas,design-patterns,Python,Pandas,Design Patterns,使用聚合函数组合其他几个数据帧来生成熊猫数据帧的pythonic方法是什么?(数据帧都是具有相同标题的相同形状。) 我可能感兴趣的聚合函数是平均值、最小值、最大值和使用两个操作数的用户定义函数 例如,这是我生成数据帧(max)的方法,该数据帧具有来自其他四个数据帧(df1、df2、df3、df4)的最大元素。这并不是一个我可以在所有情况下应用的模式(习语),计算平均值看起来会有很大的不同 import pandas as pd df1 = pd.DataFrame({'a' : [1,2,3]
max
)的方法,该数据帧具有来自其他四个数据帧(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所述,
description
函数为您执行一些常规聚合:
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
或者使用
description
而不是max
谢谢。如何应用我自己的用户定义函数而不是max()?@T33C您可以使用groupby.apply
函数,并将自定义函数传递给它。无法使用apply
使用我的示例udf替换max,def myagg(a,b):返回a>b@T33C我假设您的实际函数除了查找最大值之外还执行其他操作。apply
将把整个子数据帧传递给您的函数。因此,您需要重新编写函数来处理这个问题。执行.groupby(level=0,axis=1)。应用(lambda x:print(x))
你就会明白我的意思了。