我有一个约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)
任何帮助将不胜感激!谢谢
答案 0 :(得分:2)
将sample
与drop
一起使用:
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)