Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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 - Fatal编程技术网

Python 如何迭代行并删除列匹配的所有其他行?

Python 如何迭代行并删除列匹配的所有其他行?,python,pandas,Python,Pandas,我试图在数据框中逐行删除所有具有相同“hole_ID”但保留原始行的行。所以最近的邻居只能在不同的洞里搜索。以下是我目前掌握的情况: 将熊猫作为pd导入 s1=StringIO(东、北、标高、孔ID 11,11,5,A 51,51,6,A 61,61,11,A 21,21,2,B 31,31,3,B 71,71,3,B 81,81,4,B') df2=pd.read\U csv(s1) 对于idx,df2.iterrows()中的行: dftype=df2。删除重复项(子集=['hole\u

我试图在数据框中逐行删除所有具有相同“hole_ID”但保留原始行的行。所以最近的邻居只能在不同的洞里搜索。以下是我目前掌握的情况:

将熊猫作为pd导入
s1=StringIO(东、北、标高、孔ID
11,11,5,A
51,51,6,A
61,61,11,A
21,21,2,B
31,31,3,B
71,71,3,B
81,81,4,B')
df2=pd.read\U csv(s1)
对于idx,df2.iterrows()中的行:
dftype=df2。删除重复项(子集=['hole\u ID'],保留='first')
这就是我得到的:

Out[20]:
东-北标高孔ID
0 11 11 5 A
3212B
这就是我想要得到的:

Out[18]:
东-北标高孔ID
0 11 11 5 A
3212B
43143B
5 71 3 B
6814 B
因此,对于第1行,将删除具有相同孔ID('A')的所有其他行

编辑:我需要对原始数据帧中的每一行执行此操作,以便在孔ID不匹配的情况下执行最近邻计算


提前感谢。

如果您只想在
孔ID
A
的位置放置重复项,您可以
pd.concat
在数据帧索引的一侧放置重复项,在另一侧放置其他情况:

pd.concat([ 
    df2[df2.hole_ID.eq('A')].drop_duplicates(subset=['hole_ID'], keep='first'),
    df2[df2.hole_ID.ne('A')]],
    axis=0)

    east  north  elev hole_ID
0    11     11     5       A
3    21     21     2       B
4    31     31     3       B
5    71     71     3       B
6    81     81     4       B

如果您只想在
hole\u ID
A
的位置放置重复项,则可以
pd.concat
在数据帧的一侧(当该值为真时)放置重复项,另一侧放置其他情况:

pd.concat([ 
    df2[df2.hole_ID.eq('A')].drop_duplicates(subset=['hole_ID'], keep='first'),
    df2[df2.hole_ID.ne('A')]],
    axis=0)

    east  north  elev hole_ID
0    11     11     5       A
3    21     21     2       B
4    31     31     3       B
5    71     71     3       B
6    81     81     4       B

我将创建一个函数。使用 能够选择不同的ID

def remove_by_hole_ID(df,hole_ID):
    if not isinstance(hole_ID,list):
        hole_ID = [hole_ID]
    m = df['hole_ID'].isin(hole_ID)
    return pd.concat([df[m].drop_duplicates(subset = 'hole_ID'),df[~m]],sort = True)


我将创建一个函数。使用 能够选择不同的ID

def remove_by_hole_ID(df,hole_ID):
    if not isinstance(hole_ID,list):
        hole_ID = [hole_ID]
    m = df['hole_ID'].isin(hole_ID)
    return pd.concat([df[m].drop_duplicates(subset = 'hole_ID'),df[~m]],sort = True)


您不需要迭代行来完成此操作,
drop\u duplicates
可以同时在整个数据帧上工作。在你的问题中,你说你想“删除所有具有相同“洞ID”的行”,但在你的输出中,你只删除了
A
洞ID
s上的重复项。您可能希望在问题中指定。添加了编辑。我不知道该怎么说,我正在尝试迭代行以执行孔ID不匹配的最近邻搜索。到底是什么问题?我建议您阅读以下文章:。您不需要迭代行来完成此操作,
drop\u duplicates
可以同时在整个数据帧上工作。在你的问题中,你说你想“删除所有具有相同“洞ID”的行”,但在你的输出中,你只删除了
A
洞ID
s上的重复项。您可能希望在问题中指定。添加了编辑。我不知道该怎么说,我正在尝试迭代行以执行孔ID不匹配的最近邻搜索。到底是什么问题?我建议您阅读以下文章:。