groupby由groupby选择pandas中的值

时间:2015-05-11 17:00:21

标签: python pandas

我的数据框如下:

marker    date         value       identifier

EA    2007-01-01      0.33            55
EA    2007-01-01      0.73            56
EA    2007-01-01      0.51            57
EA    2007-02-01      0.13            55
EA    2007-02-01      0.23            57
EA    2007-03-01      0.82            55
EA    2007-03-01      0.88            56
EB    2007-01-01      0.13            45
EB    2007-01-01      0.74            46
EB    2007-01-01      0.56            47
EB    2007-02-01      0.93            45
EB    2007-02-01      0.23            47
EB    2007-03-01      0.82            45
EB    2007-03-01      0.38            46
EB    2007-03-01      0.19            47

现在我想按值对这个数据框进行选择,所以我使用

df.groupby(marker).get_group('EA')

但我也想得到值的平均值,并注意到我有一个重复的日期索引,所以现在我必须做两个 groupbys因为索引不同,导致

df.groupby(marker).get_group('EA').groupby(df.groupby(marker).get_group('EA').index.date).mean()['value'].plot()
什么显然不是很清晰。如何在不创建中间变量的情况下实现此目的?

1 个答案:

答案 0 :(得分:1)

你不能,因为你在评论AssertionError上面写的原因。 Pandas希望根据某些序列执行(第二个)groupby,该序列与DataFrame获得分组的长度完全相同。如果您不愿意首先创建描述DataFrame值的EA,那么您基本上无法动态地再次创建它。

不仅不太清晰,而且不必要地昂贵。说到这,我会像这样重写你的代码:

eas = df[df.marker == 'EA']
eas.value.groupby(eas.date).mean().plot();

执行groupby并保留单个组是一种非常昂贵的方式,只需根据密钥进行过滤。