3

给定任何二维 DataFrame,您可以调用例如。df.sample(frac=0.3)检索样本。但是此示例将完全打乱行顺序。

有没有一种简单的方法来获取保留行顺序的子样本?

4

2 回答 2

4

我们可以做的是使用df.sample(),然后按原始行顺序对结果索引进行排序。附加sort_index()调用就可以了。这是我的代码:

df = pd.DataFrame(np.random.randn(100, 10))
result = df.sample(frac=0.3).sort_index()

您甚至可以按升序获得它。文档在这里

于 2020-01-04T20:27:55.683 回答
0

问题的措辞方式听起来像是接受的答案没有提供有效的解决方案。我不确定 OP 真正想要什么。但是,如果我们不假设原始索引已经排序,我们就不能依赖于sort_index()根据原始顺序对行重新排序。

假设我们有一个具有任意索引的 DataFrame

df = pd.DataFrame(np.random.randn(100, 10), np.random.rand(100))

我们可以先重置索引,得到一个 RangeIndex,采样,重新排序,恢复原索引

df_sample = df.reset_index().sample(frac=0.3).sort_index().set_index("index")

这保证了我们保持原始顺序,无论它是什么,无论索引是什么。

最后,如果已经有一个名为“index”的列,我们需要做一些稍微不同的事情,比如先重命名索引,或者在采样时将它保存在一个单独的变量中。但是原理还是一样的。

于 2020-12-21T12:32:40.557 回答