Python 使用一组条件导航到数据帧中的单元格
我有一个csv表,如下所示: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
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
这似乎只在值不是字符串时才起作用。是的,对于字符串,条件值需要加引号。