Python数据帧从列表中按值删除行
我有一个相当简单的问题,但我找不到一个干净的方法。我希望根据特定列(id)中的值从数据帧中删除一些行,但我只希望一次删除一个事件(最好是随机的)。以下是一个例子: 我有以下要删除的ID列表:Python数据帧从列表中按值删除行,python,pandas,dataframe,rows,Python,Pandas,Dataframe,Rows,我有一个相当简单的问题,但我找不到一个干净的方法。我希望根据特定列(id)中的值从数据帧中删除一些行,但我只希望一次删除一个事件(最好是随机的)。以下是一个例子: 我有以下要删除的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
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
2 | 0
2 | 0
3 | 0
id |类
------ | ------
1 | 0
1 | 0
2 | 0
2 | 0
2 | 0
2 | 0
3 | 0
3 | 0
3 | 0
我的目标是获得此数据帧:
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
2 | 0
2 | 0
3 | 0
id |类
------ | ------
1 | 0
2 | 0
2 | 0
3 | 0
有什么想法吗?这是可行的,但不是随机的:
for currentID in idsToDelete:
df = df.drop(df[df.id == currentID].index[0])
否我不想删除重复项,我想删除一个id为1的随机行,3个id为2的随机行和2个id为3的随机行。假设输出中可能存在重复项。我更改了示例以使其更清晰。而且碰巧也是迭代的。是的。你可以改变这一点-传递你想要保留的
id
列表。有一个矢量化的解决方案。您可以使用“sample”方法来洗牌数据帧:sample(frac=1)