我有一个包含以下列的
数据框:region_id
,,,,,,和。name
parent
parent_name
t2m
d2m
tp
我想以特定方式对列值进行分组和聚合。为了实现这一点,我定义了以下列表:
w_params = ['t2m', 't2m', 't2m', 'd2m', 'tp']
operation = ['max', 'min', 'mean', 'mean', 'sum']
common_cols = ['region_id', 'name', 'parent', 'parent_name']
我已经编写了函数来按和聚合agg_daily
对列值进行分组。date
region_id
def agg_daily(df, common_cols, w_params, operation):
"""
Aggregate the data for each day.
Parameters
----------
df : pandas dataframe
Dataframe containing daily data.
Returns
-------
agg_daily_df : pandas dataframe
Dataframe containing aggregated data for each day.
"""
agg_daily_df = df.groupby(['date', 'region_id']).agg(
name=('name', 'first'),
parent=('parent', 'first'),
parent_name=('parent_name', 'first'),
t2m_max=('t2m', 'max'),
t2m_min=('t2m', 'min'),
t2m_mean=('t2m', 'mean'),
d2m=('d2m', 'mean'),
tp=('tp', 'sum')
).reset_index()
agg_daily_df = agg_daily_df.sort_values(['region_id', 'date'], ascending=[True, True]).reset_index(drop=True)
return agg_daily_df
但是,请注意agg_daily
, 中的参数(agg
例如t2m_max
)是硬编码的。相反,我想将、、作为参数传递给,避免硬编码,同时让函数执行所需的操作。t2m_min
t2m_mean
common_cols
w_params
operation
agg_daily
agg_daily
请注意,对于属于的列common_cols
,我不希望在最终输出中创建新的列名。但是,对于属于的列w_params
,我希望创建一个与operation
正在执行的相对应的列。
有人能帮助我获得一个可定制的功能吗?
解压由命名聚合中的 w_params 和操作配对创建的字典:
应用:
理想情况下,您会添加一些检查 - w_params 的长度应该与操作相同,操作中的条目应该是字符串(如果不是,您必须考虑如何获取名称 -
.__name__()
可能),...这对你有用吗?