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
对于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