Pandas agg 根据数据类型定义指标

Pandas agg define metric based on data type

对于pandasagg,有没有办法根据数据类型指定聚合函数?例如,对象类型的所有列都获得“第一”,所有浮点数获得“平均值”,等等?以避免必须输入所有列及其各自的聚合函数。

示例数据:

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

所需代码:

iris.agg({"object":"first", "float":"mean"})
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)

我会做:

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()})

Returns:

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

另一种不依赖于 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