Geo Pandas 数据框/矩阵 - filter/drop NaN / 假值
Geo Pandas Data Frame / Matrix - filter/drop NaN / False values
我将 GeoSeries.almost_equals(other[ decimal=6]) 函数应用于具有 1000 万个条目的地理数据框,以便找到彼此靠近的多个地理点。
:
这给了我矩阵,现在我需要过滤所有 True 值以便创建 DF/list 只有与地理相关的 POI,所以我使用了:
现在,我很难弄清楚如何进一步处理这个矩阵的过滤器。
预期输出是矢量、列表或理想情况下具有所有 TRUE(匹配)值的 DF,但彼此匹配重新 1 到 1,并重复(如果 [1,9] 则 [9,1] 从输出中删除
列表示例:
DF 示例:
考虑这个示例数据框:
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
然后我堆叠数据框,为索引级别指定所需的名称,并且 select 仅 '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)
我将 GeoSeries.almost_equals(other[ decimal=6]) 函数应用于具有 1000 万个条目的地理数据框,以便找到彼此靠近的多个地理点。
:
这给了我矩阵,现在我需要过滤所有 True 值以便创建 DF/list 只有与地理相关的 POI,所以我使用了:
现在,我很难弄清楚如何进一步处理这个矩阵的过滤器。
预期输出是矢量、列表或理想情况下具有所有 TRUE(匹配)值的 DF,但彼此匹配重新 1 到 1,并重复(如果 [1,9] 则 [9,1] 从输出中删除
列表示例:
DF 示例:
考虑这个示例数据框:
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
然后我堆叠数据框,为索引级别指定所需的名称,并且 select 仅 '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)