从pandas Dataframe 中随机删除行,而不对数据集进行 Shuffle

jw5wzhpr  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(163)

我有一个数据集,它需要省略几行,同时保持行的顺序。我的想法是使用一个掩码,其中包含一个介于0和数据集长度之间的随机数,但我不确定如何设置掩码而不打乱行,即类似于对数据集进行采样的方法。
示例:数据集有5行和2列,我想随机删除一行。

Col1  Col2
   A     1
   B     2 
   C     5     
   D     4
   E     0

转换为:

Col1  Col2
   A     1
   B     2   
   D     4
   E     0

通过随机选择省略第三行(Col1='C')。
我该怎么做呢?

jchrr9hc

jchrr9hc1#

下面的方法应该对你有用。这里我从df的索引中随机抽取remove_n的row_ids。之后,df.drop从 Dataframe 中删除这些行,并返回旧 Dataframe 的新子集。

import pandas as pd
import numpy as np
np.random.seed(10)

remove_n = 1
df = pd.DataFrame({"a":[1,2,3,4], "b":[5,6,7,8]})
drop_indices = np.random.choice(df.index, remove_n, replace=False)
df_subset = df.drop(drop_indices)

DataFrame df

a   b
0   1   5
1   2   6
2   3   7
3   4   8

DataFrame df_subset

a   b
0   1   5
1   2   6
3   4   8
hk8txs48

hk8txs482#

我们可以sample帧,然后对索引进行排序。

n_remove = 2
df1 = df.sample(n=len(df)-n_remove).sort_index()

另一种方法是对随机选择的索引进行排序和过滤。

keep_idx = np.random.default_rng().choice(len(df), replace=False, size=len(df)-n_remove)
keep_idx.sort()

df1 = df.take(keep_idx)

相关问题