Python 如何迭代行并删除列匹配的所有其他行?
我试图在数据框中逐行删除所有具有相同“hole_ID”但保留原始行的行。所以最近的邻居只能在不同的洞里搜索。以下是我目前掌握的情况: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
将熊猫作为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不匹配的最近邻搜索。到底是什么问题?我建议您阅读以下文章:。