如何基于列条目从pandas数据框中删除随机行?

时间:2019-03-02 03:46:00

标签: python pandas dataframe random

我有一个约3700行的数据集,需要根据该列删除其中的1628行。数据集如下所示:

useEffect

对于1068行,如果Compliance = true,我想删除整行。

问题是,我想随机执行此操作;我不想删除前1063行。我尝试过:

compliance  day0  day1  day2  day3  day4
True        1     3     9     8     8
False       7     4     8     3     2
True        4     5     0     3     5
True        5     3     9     6     2

但是在删除了几行之后,我收到了以下错误消息:

for z in range(1629):
    rand = random.randint(0,(3783-z)) #subtract z since dataframe shape is shrinking
    if str(data.iloc[rand,1]) == 'True':
        data = data.drop(balanced_dataset.index[rand])

我也尝试过:

 'labels [2359] not contained in axis'

frac现在是任意选择的,我只是希望它能工作。我收到以下错误:

data.drop(data("adherence.str.startswith('T').values").sample(frac=.4).index)

任何帮助将不胜感激!谢谢

3 个答案:

答案 0 :(得分:2)

sampledrop一起使用:

n = 1068
# Do this first if you haven't already.
# df.compliance = df.compliance.map(pd.eval)
df_dropped = df.drop(df[df.compliance].sample(n=n).index)

要使其正常工作,n必须严格小于过滤后的DataFrame。


示例随机删除两行。

df.drop(df[df.compliance].sample(n=2).index)

   compliance  day0  day1  day2  day3  day4
1       False     7     4     8     3     2
3        True     5     3     9     6     2

答案 1 :(得分:1)

这对我有用: 您将生成要从中删除元素的索引列表(在您的情况下为Compliance==True)。然后,从该列表中随机选择(不替换)要删除的元素。 然后将它们从DataFrame中删除

to_remove = np.random.choice(data[data['Compliance']==True].index,size=1068,replace=False)
data.drop(to_remove)

答案 2 :(得分:0)

您可以尝试:

df_dropped = df.drop(df.loc[df.compliance, :]).sample(n=fraction).index)