gpt4 book ai didi

python - 具有重复索引的数据帧上的 groupby 或平均值的 groupby 的平均值

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:36 26 4
gpt4 key购买 nike

我有一个这种格式的数据框:

               value    identifier
2007-01-01 0.087085 55
2007-01-01 0.703249 56
2007-02-01 0.967872 55
2007-02-01 0.954142 56
2008-01-01 0.804404 55
2008-01-01 0.475372 56
2008-02-01 0.025823 55
2008-02-01 0.414736 56

我需要按月绘制箱线图。我有两种方法:首先按索引进行分组,复制到新的数据帧,然后按月进行分组:

by_index = dd.groupby(dd.index).mean()
temp = pd.DataFrame()
temp['value'] =by_index['value']
by_month = temp.groupby(lambda x: x.month)
by_month.boxplot(subplots=False)

或者第一个按月分组,直接取平均值并绘图:

by_month = dd.groupby(lambda x: x.month)
by_month_avg = by_month.mean()
by_month_avg['value'].plot()

问题在于这两种方法之间的手段不同。正确的做法是什么?两个结果应该相等吗?

最佳答案

我认为造成困惑的原因是您在这两种情况下使用了不同的语法,并且差异不太明显。在一种情况下,您使用 lambda 来操作索引:

dd.groupby(lambda x: x.month).mean()

或者,您可以这样做(类似于您在其他情况下所做的操作):

dd.groupby( dd.index.month ).mean()

那么应该清楚为什么上面给出的答案与以下内容不同:

dd.groupby( dd.index ).mean()

在一种情况下,结果是按日期的平均值,在另一种情况下,结果是按月的平均值。也许这个打印转储也会有所帮助:

dd.index.date

array([datetime.date(2007, 1, 1), datetime.date(2007, 1, 1),
datetime.date(2007, 2, 1), datetime.date(2007, 2, 1),
datetime.date(2008, 1, 1), datetime.date(2008, 1, 1),
datetime.date(2008, 2, 1), datetime.date(2008, 2, 1)], dtype=object)

dd.index.month
array([1, 1, 2, 2, 1, 1, 2, 2])

我刚刚添加了“日期”属性以使其打印更清晰,但想法没有改变。前者groupby有4组,后者有2组。

根据后续问题,我想知道您是否真正想要的是按月和年分组?

dd.groupby([dd.index.year,dd.index.month]).mean()

value identifier
2007 1 0.395167 55.5
2 0.961007 55.5
2008 1 0.639888 55.5
2 0.220279 55.5

关于python - 具有重复索引的数据帧上的 groupby 或平均值的 groupby 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29698740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com