Python - Pandas - Groupby条件组中的列值
问题描述:
我有一个数据框,其结构为列group_,vals_和dates_。Python - Pandas - Groupby条件组中的列值
我想对group_执行groupby操作,然后为每个组输出一个统计信息,以日期为条件。例如,关联日期低于某个日期的组内所有vals_的平均值。
我试图
df_.groupby(group_).agg(lambda x: x[x['date_']< some_date][vals_].mean())
但这种失败。我相信这是因为x不是一个数据框,而是一个系列。它是否正确?是否有可能通过groupby实现我在这里实现的目标?
答
可以不同地写:
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
函数内提供它们。
'df_.groupby(group _)。agg(lambda x:x.loc [x ['date _']
jezrael
谢谢。在我尝试这个之前,我刚刚意识到x是所有类型系列而不是数据框。这是预期的吗? – clog14
嗯,它似乎不是,尝试'应用'而不是'agg' – jezrael