[英]How to sample from Pandas DataFrame while keeping row order
给定任何二维数据帧,您可以调用例如。 df.sample(frac=0.3)
检索样本。 但是此示例将完全打乱行顺序。
有没有一种简单的方法来获取保留行顺序的子样本?
我们可以做的是使用df.sample()
,然后按原始行顺序对结果索引进行排序。 附加sort_index()
调用可以解决问题。 这是我的代码:
df = pd.DataFrame(np.random.randn(100, 10))
result = df.sample(frac=0.3).sort_index()
您甚至可以按升序获取它。 文档在这里。
问题的措辞方式,听起来接受的答案没有提供有效的解决方案。 我不确定 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”的列,我们需要做一些稍微不同的事情,比如先重命名索引,或者在我们采样时将它保存在一个单独的变量中。 但原理是一样的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.