1 回答
TA贡献1818条经验 获得超3个赞
1)要确定一列是否为数字,您可以使用pandas.api.types.is_numeric_dtype
2)要查找剩余的列,您可以使用set(df.columns)减去您使用的列groupby以及具有特定聚合函数的列,例如
from pandas.api.types import is_numeric_dtype
fields_groupby = ['Day', 'Month']
fields_specific = {
'High': [min, 'mean', max],
'Low': [min, 'mean', max],
'Open': 'mean',
'Size': lambda x: x.value_counts().index[0],
}
fields_other = set(set(stock.columns) - set(fields_groupby) - set(fields_specific))
fields_agg_remaining = {col: 'mean' if is_numeric_dtype(stock[col]) else lambda x: x.value_counts().index[1] for col in fields_other}
之后,将 和 的集合组合为fields_specificaggfields_agg_remaining字段列表
agg_fields = fields_agg_remaining
agg_fields.update(fields_specific)
stock.groupby(['Day', 'Month']).agg(agg_fields).round(2)
编辑:您可以组合所有内容以将它们放入字典参数中,例如:
stock.groupby(['Day', 'Month']).agg(
{col:
[min, 'mean', max] if col in ['High', 'Low'] else
'mean' if col in ['Open'] else
lambda x: x.value_counts().index[0] if col in ['Size'] else
'mean' if is_numeric_dtype(stock[col]) else
lambda x: x.value_counts().index[1] for col in set(set(stock.columns) - {'Day', 'Month'})}
).round(2)
添加回答
举报