我尝试使用np. random. choice从17mm Dataframe 中随机选择记录,因为与其他方法相比,它运行速度更快,但我在每个记录的输出中得到不正确的值...示例如下:
data = {
"calories":[420,380,390,500,200,100],
"Duration":[50,40,45,600,450,210],
"Id":[1,1 2,3,2,3],
"Yr":[2003,2003,2009,2003,2012,2003],
"Mth":[3,6,9,12,3,6],
}
df = PD.dataframe(data)
df2=df.groupby(['id','yr'],as_index=False).agg(np.random.choice)
输出:
Id yr calories duration mth
1 2003 420 50 6
2 2009 390 45 9
2 2012 200 450 3
3 2003 500 210 6
输出中的问题是Id 3的卡路里500,持续时间和mth应该是600和12而不是210和6 ...有人能帮助为什么它是从不同的行选择值吗?
预期产出:
随机选择后应保留相同的行值
1条答案
按热度按时间ffdz8vbo1#
这不起作用,因为Pandas在每列上独立应用聚合,请尝试放入print语句,例如:
可以让你看到函数是什么时候被调用的,以及调用的对象是什么。
我不是Pandas方面的Maven,但使用
GroupBy.apply
似乎是我发现的保持行在一起的最简单的方法。如下所示:
产生:
开头的两个数字是因为你最终得到了一个多索引。如果你想知道行是从哪里选择的,这将包含有用的信息,否则你可以放弃索引。
请注意,文档中有警告说,这可能不是很好的性能,但不知道细节。
更新:我刚刚阅读了更多的文档,注意到有一个
GroupBy.sample
方法,所以您可以改为:这大概是性能以及要短得多!