Pandas根据数据类型定义度量的agg方法

3

对于pandas的agg方法,有没有一种方式可以基于数据类型指定聚合函数?例如,所有类型为object的列都使用“first”,所有float列都使用“mean”,以此类推?这样可以避免手动编写所有列及其相应的聚合函数。

示例数据:

import seaborn as sns
iris = sns.load_dataset('iris')

期望的代码:

iris.agg({"object":"first", "float":"mean"})
3个回答

4

我会这样做:

import seaborn as sns
iris = sns.load_dataset('iris')

agg_method = {'float64': 'mean', 'object':  'count'}

iris.agg({k: agg_method[str(v)] for k, v in iris.dtypes.items()})

返回:

sepal_length      5.843333
sepal_width       3.057333
petal_length      3.758000
petal_width       1.199333
species         150.000000
dtype: float64

0
def a(x):
    if x.dtype == np.dtype('float64'):
        dict[x.name] = "mean"
    elif x.dtype == np.dtype('object'):
        dict[x.name] = "first"


dict = {}

df = df.apply(a)

iris.agg(dict)

也许我不理解这是如何工作的,但是这段代码对我来说不起作用。 - user2974951
"对我不起作用"????有什么错误? - Wilian
好的...你代码中的df是什么?这样的对象不存在。 - user2974951
一个Pandas的数据帧(您的帖子标签)。 - Wilian
由于a已经是一个带有一个参数的函数,您可以使用df = df.apply(a),不需要使用lambda表达式。 - joanis

0

一种不依赖于agg的替代方法是分别应用函数并连接:

pd.concat([iris.mean(numeric_only=True), 
           iris.select_dtypes('object').count()]
         )

sepal_length      5.843333
sepal_width       3.057333
petal_length      3.758000
petal_width       1.199333
species         150.000000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接