我有一个看起来像这样的dataframe:
| 动物|动物园|
| --------------|--------------|
| 狮子|柏林|
| 狮子|慕尼黑|
| 狮子|巴黎|
| 猴子|柏林|
| 猴子|慕尼黑|
| 猴子|鹿特丹|
| bat |柏林|
| 鹅|鹿特丹|
| 老虎|巴黎|
| 老虎|慕尼黑|
我正在寻找一种方法来动态地构建一个查询,该查询返回出现在一组特定动物园中的动物的唯一值,例如位于柏林和慕尼黑动物园的所有动物。
结果应如下所示:
result = ['Lion', 'Monkey']
到目前为止我试过这个
# # initialize list of lists
data = [
['Lion', 'Berlin'], ['Lion', 'Munich'], ['Lion', 'Paris'],
['Monkey', 'Berlin'], ['Monkey', 'Munich'], ['Monkey', 'Rotterdam'],
['Bat', 'Berlin'],
['Goose', 'Rotterdam'],
['Tiger', 'Paris'], ['Tiger', 'Munich']
]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['Animal', 'Zoo'])
# filter df
df_filtered = df.query(" (`Zoo` == 'Berlin' | `Zoo` == 'Munich')")
# get animals as list
result = df_filtered['Animal'].unique().tolist()
# print list of results
print(result)
这给了我在柏林或慕尼黑出现的动物。
['Lion', 'Monkey', 'Bat', 'Tiger']
将OR转换为AND语句会导致一个空的dataframe:
df.query(" (`Zoo` == 'Berlin' & `Zoo` == 'Munich')")
2条答案
按热度按时间am46iovg1#
使用groubby:
输出: ['Lion','Monkey']
6fe3ivhb2#
要获取两个动物园中都存在的动物,您需要通过这些动物园过滤初始数据集,并通过匹配2个所需的动物园来过滤动物组: