diff --git a/netbone/filters.py b/netbone/filters.py index a728f80bb5673e4f5030812af9be51d2cd3da030..9823a0dbbe865142f0fc53d458c27f32871dfc28 100644 --- a/netbone/filters.py +++ b/netbone/filters.py @@ -12,7 +12,7 @@ def boolean_filter(backbone, narrate=True, value=[]): data = nx.to_pandas_edgelist(data) if narrate: backbone.narrate() - return nx.from_pandas_edgelist(data[data[column] == True], edge_attr=edge_properties(data)) + return nx.from_pandas_edgelist(data[data[column]], edge_attr=edge_properties(data)) print("The accepted filters for " + backbone.method_name + " are: " + ', '.join( [fun.__name__ for fun in backbone.compatible_filters()])) @@ -21,19 +21,30 @@ def threshold_filter(backbone, value, narrate=True, secondary_property='weight', **kwargs): data = backbone.to_dataframe() property_name = backbone.property_name - ascending = backbone.ascending + filter_by = [property_name] + ascending = [backbone.ascending] + + if backbone.filter_on == 'Edges': + filter_by.append(secondary_property) + ascending.append(secondary_property_ascending) if threshold_filter in backbone.compatible_filters(): - data = data.sort_values(by=[property_name, secondary_property], - ascending=[ascending, secondary_property_ascending]) + data = data.sort_values(by=filter_by, + ascending=ascending) if narrate: backbone.narrate() - if ascending: - return nx.from_pandas_edgelist(data[data[property_name] < value], edge_attr=edge_properties(data)) + if backbone.ascending: + data = data[data[property_name] < value] + if backbone.filter_on == 'Edges': + return nx.from_pandas_edgelist(data, edge_attr=edge_properties(data)) + return backbone.graph.subgraph(list(data.index)).copy() else: - return nx.from_pandas_edgelist(data[data[property_name] > value], edge_attr=edge_properties(data)) + data = data[data[property_name] > value] + if backbone.filter_on == 'Edges': + return nx.from_pandas_edgelist(data, edge_attr=edge_properties(data)) + return backbone.graph.subgraph(list(data.index)).copy() print("The accepted filters for " + backbone.method_name + " are: " + ', '.join( [fun.__name__ for fun in backbone.compatible_filters()])) @@ -45,7 +56,6 @@ def fraction_filter(backbone, value, narrate=True, secondary_property='weight', filter_by = [backbone.property_name] ascending = [backbone.ascending] - if backbone.filter_on == 'Edges': filter_by.append(secondary_property) ascending.append(secondary_property_ascending) @@ -60,9 +70,8 @@ def fraction_filter(backbone, value, narrate=True, secondary_property='weight', value = math.ceil(value * len(data)) return nx.from_pandas_edgelist(data[:value], edge_attr=edge_properties(data)) else: - b = backbone.graph.copy() value = math.ceil(value * len(backbone.graph)) - return b.subgraph(list(data[:value].index)) + return backbone.graph.subgraph(list(data[:value].index)).copy() print("The accepted filters for " + backbone.method_name + " are: " + ', '.join( [fun.__name__ for fun in backbone.compatible_filters()]))