创建一行 DataFrame
并与原始数据进行 merge
:
a = pd.DataFrame(v, index=[0]).merge(df)['item']
print (a)
0 3
Name: item, dtype: int64
另一种解决方案是使用
query
,但如果需要字典的字符串值,则需添加另一个
"
。
v1 = {k: '"{}"'.format(v) if isinstance(v, str) else v for k, v in v.items()}
print (v1)
{'size': 1, 'color': '"red"'}
df = df.query(' & '.join(['{}=={}'.format(i,j) for i, j in v1.items()]))['item']
print (df)
1 3
Name: item, dtype: int64
输出结果可能有三种方式 - Series
(具有多个值)、单个值或为空,因此创建了帮助函数:
def get_val(v):
x = pd.DataFrame(v, index=[0]).merge(df)['item']
if x.empty:
return 'Not found'
elif len(x) == 1:
return x.values[0]
else:
return x.values.tolist()
print (get_val({'size':1,'color':'red'}))
3
print (get_val({'size':10,'color':'red'}))
Not found
print (get_val({'color':'red'}))
[2, 3]