Python - Pandas - Groupby以组中的列值为条件

时间:2017-02-27 14:24:44

标签: python pandas

我有一个带有以下结构的数据框,其中包含group_,vals_和dates_列。

我想对group_执行groupby操作,然后为每个组输出一个以日期为条件的统计信息。例如,组中相关日期低于某个日期的所有vals_的平均值。

我试过

df_.groupby(group_).agg(lambda x: x[x['date_']< some_date][vals_].mean()) 

但这失败了。我相信这是因为x不是数据帧而是系列。它是否正确?有可能通过groupby实现我想要实现的目标吗?

1 个答案:

答案 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函数中提供。