有没有办法使用列名和值字典的组合来过滤 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
答案 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