Python 3.x 如何使用pandas在python的新列中识别重复项并返回重复项
我有一个很大的数据框,它的位置名称被标记为GPS坐标。但是,多个位置被标记到一个GPS坐标上,情况不应如此。我想在此数据框中创建一个新列,列出标记在GPS坐标上的其他位置 我知道这可能有些过分,但目前,我正在使用cKDTree返回标记在GPS上的其他位置。然而,我只了解了一半的情况,我不知道打嗝是从哪里来的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: 库存
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