我有一个大约600行的数据框,可以追溯到2015年:
ID Year Trap SVL
1 2020 ['P90', 'R81'] 78
2 2019 ['P3'] 56
3 2018 ['P22', 'R1', 'R11', 'PR22'] 45
我需要搜索/过滤手头的个体(蜥蜴),已知变量是陷阱和SVL(鼻子到通风口的长度,单位为mm)-例如,当前蜥蜴可能来自陷阱=='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年开始,每年我们都会查看小于5mm的SVL。例如,2018年蜥蜴ID 3为45毫米,这意味着2021年蜥蜴ID应为75毫米,但为了匹配它,我们只需要使用SVL来观察蜥蜴<=45 类似这样的逻辑(如果你可以这么说的话!):
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语句
我可以建议您在您的测试标准中添加一个“固定”的年份吗
然后,您可以在代码本身中获得测试的线性余量
获取如上所述的数据帧
是具有测试基准年的增强查询
然后,该查询将线性余量内置到检查中
注意,查询允许蜥蜴在基准年之前生长,在基准年之后生长
也许你应该在两边都移动,但它只是遵循查询的模式(如下所示)
相关问题 更多 >
编程相关推荐