在我的Pandas query()中,我想根据一个字段是否在另一个字段的dict查询中找到的集合中进行过滤。这是一些简化的代码,说明了我的问题:
import pandas
cars = {
'Japan': {'Honda', 'Nissan', 'Toyota'},
'USA': {'Ford', 'Chevrolet', 'Tesla'},
}
data = pandas.DataFrame({
'country': ['Japan', 'Japan', 'USA'],
'make': ['Honda', 'Ford', 'Ford'],
'date': ['2018-10-04', '2018-10-05', '2018-10-06'],
}).astype(dtype={'country': 'category', 'make': 'category', 'date': 'category'})
print data.query('make in @cars[country]')
我只想包括在基于另一字段(make
)的字典查找中找到的集合中存在一个字段(@cars[country]
)的行。
country date make
0 Japan 2018-10-04 Honda
1 USA 2018-10-06 Ford
TypeError: 'Series' objects are mutable, thus they cannot be hashed
任何人都知道如何进行这项工作吗?还是我需要为此使用apply
(据我了解比较慢)?
答案 0 :(得分:1)
首先,我不确定在不使用apply的情况下如何进行字典查找(这可能很慢,因为它没有利用向量化的优势)。
但是,关于您的问题
我需要诉诸于此吗?
肯定有比应用更好的选择。例如,This post建议使用pandas.merge,该速度比应用更快。
In [29]: carsdf = pd.DataFrame({'country':["Japan"]*3+["USA"]*3, 'make':['Nissan','Honda','Toyota','Tesla','Chevolet','Ford']})
In [30]: pd.merge(data, carsdf, how='inner')
Out[28]: Out[30]:
country date make
0 Japan 2018-10-04 Honda
1 USA 2018-10-06 Ford