使用字典过滤熊猫数据框

时间:2020-12-23 19:50:49

标签: python pandas

有没有办法使用列名和值字典的组合来过滤 Pandas 数据框?

示例数据框:

df = pd.DataFrame({
    "name": ["Ann", "Jana", "Yi", "Robin", "Amal", "Nori"],
    "city": ["Chicago", "Prague", "Shanghai", "Manchester", "Chicago", "Osaka"],
    "age": [28, 33, 34, 38, 31, 37],
    "score": [79.0, 81.0, 80.0, 68.0, 61.0, 84.0],
})

column_dict = {0:"city", 1:"score"}
value_dict = {0:"Chicago", 1:61}

目标是使用匹配的键列和值字典来过滤数据框。 在此示例中,城市将被过滤为芝加哥,分数将被过滤为 61,过滤后的数据框为:

    name    city    age score
4   Amal    Chicago 31  61.0

3 个答案:

答案 0 :(得分:1)

keep_rows = pd.Series(True, index=df.index)
for k, col in column_dict.items():
    value = value_dict[k]
    keep_rows &= df[col] == value

>>> df[keep_rows]
   name     city  age  score
4  Amal  Chicago   31   61.0

答案 1 :(得分:1)

使用两个不同的字典来存储键和值有点有趣。你最好这样做:

filter_dict = {"city":"Chicago", "score":61}

df_filt = df
    for k,v in filter_dict.items():
        df_filt = df_filt[df_filt[k] == v]

输出:

   name     city  age  score
4  Amal  Chicago   31   61.0

答案 2 :(得分:0)

使用merge

# create filter DataFrame from column_dict and value_dict
df_filter = pd.DataFrame({value: [value_dict[key]] for key, value in column_dict.items()})

# use merge with df_filter
res = df.merge(df_filter, on=['city', 'score'])

print(res)

输出

   name     city  age  score
0  Amal  Chicago   31   61.0