2017-08-25 146 views
1

我有一个相当简单的问题,但我找不到一个干净的方式来做到这一点。我想从我的数据框中删除一些行,根据它们在特定列(id)中的值,但我只想一次删除一个事件(最好是随机)。这里有一个例子:Python熊猫数据框从列表中删除行按价值

我的ID下面的列表,我想删除:

idsToDelete = [1,2,2,3,3] 

换句话说,我想删除一个随机行使用id = 1,两个随机行ID为2和ID为两个随机排3

我都有以下数据框:

list1 = np.array([[1,0],[1,0],[2,0],[2,0],[2,0],[2,0],[3,0],[3,0],[3,0]]) 
df = pd.DataFrame(list1, columns=["id","class"]) 
 
id | class 
------ | ------ 
1 | 0 
1 | 0 
2 | 0 
2 | 0 
2 | 0 
2 | 0 
3 | 0 
3 | 0 
3 | 0 

我的目标是得到这个数据帧:

 
id | class 
------ | ------ 
1 | 0 
2 | 0 
2 | 0 
3 | 0 

任何想法?

+0

不,我不想删除重复的,我想删除一个随机行ID为1,3个2随机行和2个随机行id为3.假设输出中可能有重复。我改变了这个例子,使其更清晰。 – SirTobi

回答

1

这工作,但它不是随机的:

for currentID in idsToDelete: 
    df = df.drop(df[df.id == currentID].index[0]) 
+1

恰好也是迭代式的。 yeesh。 –

+0

是的,这正是我的观点:( – SirTobi

+0

你可以把它转过来 - 传递你想保留的'id'列表,有一个矢量化的解决方案。 –