我有一个带有以下结构的数据框,其中包含group_,vals_和dates_列。
我想对group_执行groupby操作,然后为每个组输出一个以日期为条件的统计信息。例如,组中相关日期低于某个日期的所有vals_的平均值。
我试过
df_.groupby(group_).agg(lambda x: x[x['date_']< some_date][vals_].mean())
但这失败了。我相信这是因为x不是数据帧而是系列。它是否正确?有可能通过groupby实现我想要实现的目标吗?
答案 0 :(得分:0)
你可以用不同的方式写出来:
def summary(sub_df):
bool_before = sub_df["date_"] < some_date
bool_after = sub_df["date_"] > some_date
before = sub_df.loc[bool_before, vals_].mean()
after = sub_df.loc[bool_after, vals_].mean()
overall = sub_df.loc[:, vals_].mean()
return pd.Series({"before": before, "after": after, "overall": overall})
result = df_.groupby(group_).apply(summary)
结果是一个数据框,包含3个前/后/整体的平均值。
如果您需要其他摘要统计信息,可以在summary
函数中提供。