【发布时间】:2017-02-28 00:51:39
【问题描述】:
我有一个具有以下结构的数据框,其中包含 group_、vals_ 和 dates_ 列。
我想对 group_ 执行 groupby 操作,然后为每个组输出一个以日期为条件的统计信息。例如,关联日期低于某个日期的组内所有 vals_ 的平均值。
我试过了
df_.groupby(group_).agg(lambda x: x[x['date_']< some_date][vals_].mean())
但这失败了。我相信这是因为 x 不是数据框而是系列。这个对吗?是否有可能通过 groupby 实现我在这里想要实现的目标?
【问题讨论】:
-
df_.groupby(group_).agg(lambda x: x.loc[x['date_']< some_date, vals_].mean())呢? -
谢谢。在我尝试这个之前,我刚刚意识到 x 都是类型系列而不是数据框。这是预期的吗?
-
嗯,好像不行,试试
apply而不是agg -
谢谢,好的,这是我推理中的大错误。但是,我正在尝试生成基本的汇总统计数据,其中我为每个组获得高于和低于某个日期阈值以及整个日期范围的平均值。此外,我可能想在可能的其他列上输出一些其他汇总统计信息。这种方法有可能吗?
-
我认为它可以工作,如果有更复杂的尝试自定义函数,如:
df_.groupby(group_).apply(f)def f(x): x1 = x.loc[x['date_']< some_date, vals_].mean() return x1