Python 按字典值筛选dataframe,但有时包括值,有时排除值
我试图用字典过滤数据帧 但是,我想将Python 按字典值筛选dataframe,但有时包括值,有时排除值,python,pandas,Python,Pandas,我试图用字典过滤数据帧 但是,我想将过滤器['age']视为从df中排除的值列表,而不是包含的值列表 我是否可以重写以下代码,使输出为john42 London,而不是当前的john11 Warsaw 我唯一的想法是编写两个筛选字典,一个包含值,另一个包含值,然后分别使用.isin和~isin对df进行筛选。但也许还有别的办法 import pandas as pd d = { 'name': ['john', 'mike', 'john', 'tim'], 'age': [4
过滤器['age']
视为从df中排除的值列表,而不是包含的值列表
我是否可以重写以下代码,使输出为john42 London
,而不是当前的john11 Warsaw
我唯一的想法是编写两个筛选字典,一个包含值,另一个包含值,然后分别使用.isin
和~isin
对df进行筛选。但也许还有别的办法
import pandas as pd
d = {
'name': ['john', 'mike', 'john', 'tim'],
'age': [42, 24, 11, 66],
'city': ['London', 'Tokyo', 'Warsaw', 'New York'],
}
filters = {
'name': ['john', 'mike'],
'age': [66, 11, 24], # I want these to be excluded. So that age 66 and 11 are not included in the filtered df
'city': ['Warsaw', 'London', 'Tokyo'],
}
def get_filtered_df(df, filters):
for filter_name, filter_value in filters.items():
mask = df[filter_name].isin(filter_value)
df = df[mask]
return df
df = pd.DataFrame(d)
filtered_df = get_filtered_df(df, filters)
print(filtered_df)
# output is:
# name age city
# john 11 Warsaw
您只需添加适当的条件来否定/反转
掩码
:
...
def get_filtered_df(df, filters):
for filter_name, filter_value in filters.items():
mask = df[filter_name].isin(filter_value)
if filter_name == 'age':
mask = ~mask
df = df[mask]
return df
df = pd.DataFrame(d)
filtered_df = get_filtered_df(df, filters)
print(filtered_df)
输出:
name age city
0 john 42 London
1 mike 24 Tokyo
name age city
0 john 42 London
1 mike 24 Tokyo
创建两个列表,一个包含要包含的参数,另一个包含要排除的参数。并对掩模进行相应的修改
include = ["name", "city"]
exclude = ["age"]
def get_filtered_df(df, filters, include):
for filter_name, filter_value in filters.items():
mask = df[filter_name].isin(filter_value)
if filter_name not in include:
mask = ~mask
df = df[mask]
return df
df = pd.DataFrame(d)
filtered_df = get_filtered_df(df, filters)
print(filtered_df)
产量如预期