Sep-26-2023, 09:51 PM
(Sep-26-2023, 05:58 PM)deanhystad Wrote: I think your approach is all wrong. Instead of testing each column for a filter, you should make a list of filters to apply. Filtering can be done with a compact loop that loops through all the selected filters.
import pandas as pd from dataclasses import dataclass from random import choices # Make a dataframe for demonstrating filter. letters = list("ABCDEIOU") numbers = list(range(1, 10)) mixed = [f"{letter}{number}" for letter in letters for number in numbers] df = pd.DataFrame( { "Letters": choices(letters, k=20), "Numbers": choices(numbers, k=20), "Mixed": choices(mixed, k=20), } ) def filter(frame, filters): """Apply filters to dataframe. filters is a dictionary of column: values pairs.""" df = frame.copy() for key, value in filters.items(): df = df[df[key].isin(value)] return df print("Numbers = 7", filter(df, {"Numbers": [7]}), sep="\n") odd_abcs = {"Numbers": [1, 3, 5, 7, 9], "Letters": ["A", "B", "C"]} print("", "Odd ABC's", filter(df, odd_abcs), sep="\n") even_vowels = {} even_vowels["Numbers"] = [2, 4, 6, 8] even_vowels["Letters"] = ["A", "E", "I", "O", "U"] print("", "Even Vowels", filter(df, even_vowels), sep="\n")
Yes, my approach is primitive - monkey see monkey do type as im brand spanking new inside python world and im using examples from internet to understand the way.
I think i understand your idea , but i dont understand your code :)
Maybe i can mix with set filters + column filtering as to create filters for each column wont work for my needs as i dont want every time something new added to create filter or i misunderstand your idea with filers ?
So lets say if i have 10 people, i create filters for 10 people, create for regions, states etc as you using pandas.DataFrame.filter or im completely wrong ?