我的数据框如下:
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()
什么显然不是很清晰。如何在不创建中间变量的情况下实现此目的?
答案 0 :(得分:1)
你不能,因为你在评论AssertionError
上面写的原因。 Pandas希望根据某些序列执行(第二个)groupby
,该序列与DataFrame
获得分组的长度完全相同。如果您不愿意首先创建描述DataFrame
值的EA
,那么您基本上无法动态地再次创建它。
不仅不太清晰,而且不必要地昂贵。说到这,我会像这样重写你的代码:
eas = df[df.marker == 'EA']
eas.value.groupby(eas.date).mean().plot();
执行groupby
并保留单个组是一种非常昂贵的方式,只需根据密钥进行过滤。