Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据帧从列表中按值删除行_Python_Pandas_Dataframe_Rows - Fatal编程技术网

Python数据帧从列表中按值删除行

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

我有一个相当简单的问题,但我找不到一个干净的方法。我希望根据特定列(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 = 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)