我将GeoSeries.almost_equals(其他[,decimal = 6])函数应用于具有10 mil条目的地理数据框,以便找到彼此接近的多个地理点。 :
给了我矩阵,现在我需要过滤所有True值,以便创建只有地理相关的POI的DF /列表,所以我使用了:
现在,我很难弄清楚如何进一步使用此矩阵的过滤器。 预期输出是矢量,列表或理想情况下DF与所有TRUE(匹配)值但彼此匹配1到1,并重复(如果[1,9]然后[9,1]从输出中删除 列表示例:
DF示例:
答案 0 :(得分:2)
考虑这个示例数据框:
In [1]: df = pd.DataFrame([[True, False, False, True],
...: [False, True, True, False],
...: [False, True, True, False],
...: [True, False, False, True]])
In [2]: df
Out[2]:
0 1 2 3
0 True False False True
1 False True True False
2 False True True False
3 True False False True
获取匹配索引的数据框的可能解决方案:
首先,我使用np.triu
仅考虑上三角(因此您不会重复):
In [15]: df2 = pd.DataFrame(np.triu(df))
In [16]: df2
Out[16]:
0 1 2 3
0 True False False True
1 False True True False
2 False False True False
3 False False False True
然后我堆叠数据帧,为索引级别提供所需的名称,并仅选择我们拥有的行' True'值:
In [17]: result = df2.stack()
In [18]: result
Out[18]:
0 0 True
1 False
2 False
3 True
1 0 False
1 True
2 True
3 False
2 0 False
1 False
2 True
3 False
3 0 False
1 False
2 False
3 True
dtype: bool
In [21]: result.index.names = ['POI_id', 'matched_POI_ids']
In [23]: result[result].reset_index()
Out[23]:
POI_id matched_POI_ids 0
0 0 0 True
1 0 3 True
2 1 1 True
3 1 2 True
4 2 2 True
5 3 3 True
您当然可以删除包含trues的列:.drop(0, axis=1)