Geo Pandas数据框/矩阵 - 过滤/删除NaN / False值

时间:2015-10-10 19:19:21

标签: python-2.7 numpy matrix pandas geopandas

我将GeoSeries.almost_equals(其他[,decimal = 6])函数应用于具有10 mil条目的地理数据框,以便找到彼此接近的多个地理点。 : my data

enter image description here

给了我矩阵,现在我需要过滤所有True值,以便创建只有地理相关的POI的DF /列表,所以我使用了: enter image description here

现在,我很难弄清楚如何进一步使用此矩阵的过滤器。 预期输出是矢量,列表或理想情况下DF与所有TRUE(匹配)值但彼此匹配1到1,并重复(如果[1,9]然后[9,1]从输出中删除 列表示例: enter image description here

DF示例:

enter image description here

1 个答案:

答案 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)