【发布时间】:2020-01-20 07:29:31
【问题描述】:
我不知道这是否真的是一个基本问题..
所以我一直在玩 Groupby,使用 Pandas 进行聚合和采样.. 使用这个 sample.csv 文件 https://sendeyo.com/en/a36d65b2a7
这是原始数据分组的结果,使用平均聚合('i'这里是一个DataFrame):
test1 = i.groupby('State')[["Precipitation","Speed"]].mean()
test1.head(5)
Precipitation Speed
State
Alabama 0.925000 5.891875
Alaska 0.488824 8.630924
Arizona 0.234000 4.015500
Arkansas 0.380833 4.372500
California 1.017763 4.192895
然后这里是使用 sample(frac=1, replace=True) groupby 使用平均聚合的数据结果:
i_sampling = i[["Precipitation","Speed","State"]].sample(frac=1,replace=True)
test2 = i_sampling.groupby('State')[["Precipitation","Speed"]].mean()
test2.head(5)
Precipitation Speed
State
Alabama 0.810588 5.951765
Alaska 0.416984 9.862222
Arizona 0.082500 3.581875
Arkansas 0.494118 3.469412
California 1.103448 3.536207
但我无法理解和接受这些结果,以下是我的理解:
我的理解概念,sample(frac=1,replace=True) 正在制作一个 DataFrame,它具有 100% 的 DataFrame 样本和随机索引 (replace=True),我认为这就像一个随机索引 DataFrame , 所以我期望原始和采样的分组平均值必须相同。
我的问题是:
但是显示的结果有区别吗?有人可以解释一下为什么会发生这种情况吗?..我知道有很多研究使用这些方法进行引导分析,(所以这个问题只是为了澄清聚合和 groupby 在这种情况下的工作原理) p>
(注意:如果是不同的情况,我当然接受,例如:使用低于 1 的 frac,这意味着样本只使用了 DF 的一部分(低于 100%),所以结果是否有差异是很清楚的)
【问题讨论】:
-
不确定是否是这种情况,但通常您需要在执行 groupby 之前对数据进行排序。
-
删除
replace=True,它们将变得相同。 -
@Chris,好的,所以当 replace=False 时它已修复:o,谢谢!
-
那么,我想知道 replace=True 是如何工作的?
-
你选择一个样本,保留它,但放回池中。从理论上讲,您最终可能会得到所有相同的行。这就是替换的定义
标签: python-3.x pandas aggregate pandas-groupby