【发布时间】:2021-05-21 03:37:08
【问题描述】:
我有一个大约 600 行的数据框,可以追溯到 2015 年:
ID Year Trap SVL
1 2020 ['P90', 'R81'] 78
2 2019 ['P3'] 56
3 2018 ['P22', 'R1', 'R11', 'PR22'] 45
我需要搜索/过滤手头的个体(蜥蜴),已知变量是 Trap 和 SVL(鼻子到通风口的长度,单位为 mm) - 例如,当前的蜥蜴可能来自 Trap == 'R1' 及其SVL >= 45,则搜索应返回 ID 3。在 2021 年,蜥蜴的 SVL = 75(它每年增长约 10 毫米,我添加 +/- 5 毫米以表示测量误差)。
我将标准保存在一个字典中:
dict_choice = {'Trap': ['R1'],
'SVL': (70.0, 80.0)}
我的正常搜索如下:
newdf = df.loc[df.Trap.map(set(dict_choice['Trap']).issubset) &
( (df['SVL'] >= dict_choice['SVL'][0]) & (df['SVL'] <= dict_choice['SVL'][1]))
我可以将年份作为搜索条件吗? 为了尽量减少匹配蜥蜴的数量,我需要添加一个过滤器,从 2021 年开始,我们每年都会查看少 5 毫米的 SVL。例如蜥蜴 ID 3 在 2018 年是 45 毫米,这意味着到 2021 年它应该是 75 毫米,但是要匹配它,我们只需要查看 SVL
if @year == 2021:
search all where @Trap IN dict_choice['Trap'] AND ((df['SVL'] >= dict_choice['SVL'][0]) & (df['SVL'] <= dict_choice['SVL'][1]))
elif @year == 2020:
search all where @Trap IN dict_choice['Trap'] AND ((df['SVL'] >= dict_choice['SVL'][0]) & (df['SVL'] <= dict_choice['SVL'][1]-5))
elif @year == 2019:
search all where @Trap IN dict_choice['Trap'] AND ((df['SVL'] >= dict_choice['SVL'][0]) & (df['SVL'] <= dict_choice['SVL'][1]-10))
(...)
TL;DR:我可以在按其他条件过滤数据帧时包含 if 语句吗?
【问题讨论】:
标签: python pandas dataframe search