Python 3.x 如何使用pandas在python的新列中识别重复项并返回重复项

Python 3.x 如何使用pandas在python的新列中识别重复项并返回重复项,python-3.x,pandas,duplicates,Python 3.x,Pandas,Duplicates,我有一个很大的数据框,它的位置名称被标记为GPS坐标。但是,多个位置被标记到一个GPS坐标上,情况不应如此。我想在此数据框中创建一个新列,列出标记在GPS坐标上的其他位置 我知道这可能有些过分,但目前,我正在使用cKDTree返回标记在GPS上的其他位置。然而,我只了解了一半的情况,我不知道打嗝是从哪里来的 df_inventory['has_duplicates']=df_inventory.duplicated(子集=['lat,'lng'],keep=False) 对于库存点中的x: 库存

我有一个很大的数据框,它的位置名称被标记为GPS坐标。但是,多个位置被标记到一个GPS坐标上,情况不应如此。我想在此数据框中创建一个新列,列出标记在GPS坐标上的其他位置

我知道这可能有些过分,但目前,我正在使用cKDTree返回标记在GPS上的其他位置。然而,我只了解了一半的情况,我不知道打嗝是从哪里来的

df_inventory['has_duplicates']=df_inventory.duplicated(子集=['lat,'lng'],keep=False)
对于库存点中的x:
库存索引=库存树。查询球点(x,0)
如果len(库存指数)>1:
距离,索引点=库存树。查询(x,len(库存索引))
对于索引点中的y:
df_inventory.duplicates.iloc[inventory_points.index(x)]=np.append(df_inventory.duplicates.iloc[inventory_points.index(x)],df_inventory.location.iloc[y])
df_inventory.duplicates.iloc[inventory_points.index(x)]=np.unique(df_inventory.duplicates.iloc[inventory_points.index(x)])
这就是我期望看到的

+----------+-----+-----+----------------+------------+
| location | lat | lng | has_duplicates | duplicates |
+----------+-----+-----+----------------+------------+
| loc1     | 1   | 2   | T              | loc1, loc2 |
+----------+-----+-----+----------------+------------+
| loc2     | 1   | 2   | T              | loc1, loc2 |
+----------+-----+-----+----------------+------------+
| loc3     | 2   | 1   | T              | loc3, loc5 |
+----------+-----+-----+----------------+------------+
| loc4     | 3   | 4   | F              | None       |
+----------+-----+-----+----------------+------------+
| loc5     | 2   | 1   | T              | loc3, loc5|
+----------+-----+-----+----------------+------------+
| loc6     | 5   | 4   | F              | None       |
+----------+-----+-----+----------------+------------+
然而,这就是我得到的

+----------+-----+-----+----------------+------------+
| location | lat | lng | has_duplicates | duplicates |
+----------+-----+-----+----------------+------------+
| loc1     | 1   | 2   | T              | loc1, loc2 |
+----------+-----+-----+----------------+------------+
| loc2     | 1   | 2   | T              |            |
+----------+-----+-----+----------------+------------+
| loc3     | 2   | 1   | T              | loc3, loc5 |
+----------+-----+-----+----------------+------------+
| loc4     | 3   | 4   | F              | None       |
+----------+-----+-----+----------------+------------+
| loc5     | 2   | 1   | T              |            |
+----------+-----+-----+----------------+------------+
| loc6     | 5   | 4   | F              | None       |
+----------+-----+-----+----------------+------------+
loc2应将loc1、loc2列为副本;loc5应该有loc3,loc5作为副本列出,但它没有

更新


index()只返回列表中第一个出现的项,对于包含重复项的列表不起作用。最后,我在另一个列表中枚举了该列表,然后遍历枚举的列表以引用所需的列表。这仍然是一个相当笨拙的工作,但如果有人有更好的方法来通过它,请让我知道

这能回答你的问题吗

df_inventory = pd.DataFrame({
'location':['loc1','loc2','loc3','loc4','loc5','loc6'], 
'lat':[1,1,2,3,2,5], 
'lng':[2,2,1,4,1,4], 
})

输出:

    location    lat lng duplicates
0   loc1        1   2   loc1 loc2
1   loc2        1   2   loc1 loc2
2   loc3        2   1   loc3 loc5
3   loc4        3   4   NaN
4   loc5        2   1   loc3 loc5
5   loc6        5   4   NaN
对不起,我不知道如何正确地告诉你结果。。。有人可以帮我你可以试试:

df_inventory['duplicates'] = df_inventory.groupby(['lat','lng'])['location'] \
                              .transform(lambda x: ', '.join(x) if len(x) > 1 else None)

output:


location    lat lng duplicates
0   loc1    1   2   loc1, loc2
1   loc2    1   2   loc1, loc2
2   loc3    2   1   loc3, loc5
3   loc4    3   4   NaN
4   loc5    2   1   loc3, loc5
5   loc6    5   4   NaN

谢谢,这真的很接近我要找的。不过,我希望将这些结果保存到现有数据框中的新列中。谢谢!这以一种更加友好的计算方式实现了这一点!
df_inventory['duplicates'] = df_inventory.groupby(['lat','lng'])['location'] \
                              .transform(lambda x: ', '.join(x) if len(x) > 1 else None)

output:


location    lat lng duplicates
0   loc1    1   2   loc1, loc2
1   loc2    1   2   loc1, loc2
2   loc3    2   1   loc3, loc5
3   loc4    3   4   NaN
4   loc5    2   1   loc3, loc5
5   loc6    5   4   NaN