对于pandas的agg
方法,有没有一种方式可以基于数据类型指定聚合函数?例如,所有类型为object的列都使用“first”,所有float列都使用“mean”,以此类推?这样可以避免手动编写所有列及其相应的聚合函数。
示例数据:
import seaborn as sns
iris = sns.load_dataset('iris')
期望的代码:
iris.agg({"object":"first", "float":"mean"})
我会这样做:
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
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)
一种不依赖于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
df
是什么?这样的对象不存在。 - user2974951a
已经是一个带有一个参数的函数,您可以使用df = df.apply(a)
,不需要使用lambda表达式。 - joanis