Python 使用一组条件导航到数据帧中的单元格

Python 使用一组条件导航到数据帧中的单元格,python,pandas,Python,Pandas,我有一个csv表,如下所示: a, b, c, d value, value, value, value value, value, value, value 我正在将其加载到数据帧中。我还有一本类似这样的字典: data = {'a': some_value, 'b' = some_value, 'c' = some_value} 我想导航到列d中的单元格,其中该行具有本词典指定的值a、b和c。我知道只有一个单元格符合这些条件。如何执行此操作?您可以将数据转换为数据帧,然后使用合并: da

我有一个csv表,如下所示:

a, b, c, d
value, value, value, value
value, value, value, value
我正在将其加载到
数据帧中。我还有一本类似这样的字典:

data = {'a': some_value, 'b' = some_value, 'c' = some_value}

我想导航到列
d
中的单元格,其中该行具有本词典指定的值
a
b
c
。我知道只有一个单元格符合这些条件。如何执行此操作?

您可以将数据转换为数据帧,然后使用合并:

data = pd.DataFrame({'a':[1,2,3,4], 'b':[1,2,3,4],'c':[1,2,3,4],'d':[1,2,3,4]})

lookup = {'a':2,'b':2, 'c':2}

lookupdf = pd.DataFrame(lookup, index = [1]) #need the index, as they are all scalar

pd.merge(lookupdf, data)


    a   b   c   d
0   2   2   2   2

另一种方法是使用
pd.query

In [1009]: query = ' and '.join(['%s == %s' % (x, lookup[x]) for x in lookup])

In [1010]: query
Out[1010]: 'a == 2 and c == 2 and b == 2'

In [1011]: data.query(query)
Out[1011]:
   a  b  c  d
1  2  2  2  2
细节

In [1012]: lookup
Out[1012]: {'a': 2, 'b': 2, 'c': 2}

In [1013]: data
Out[1013]:
   a  b  c  d
0  1  1  1  1
1  2  2  2  2
2  3  3  3  3
3  4  4  4  4

另一种方法是在布尔条件下使用
reduce

In [1034]: data[np.logical_and.reduce(pd.DataFrame(data[x] == lookup[x] for x in lookup))]
Out[1034]:
   a  b  c  d
1  2  2  2  2

In [1035]: data[reduce(lambda x, y: x & y, [data[x] == lookup[x] for x in lookup])]
Out[1035]:
   a  b  c  d
1  2  2  2  2

这似乎只在值不是字符串时才起作用。是的,对于字符串,条件值需要加引号。