对于给定的时间序列数据集,其值与ID相对应:
我想A,找到每个分组id的最小值,然后B,有条件地检查该分组列表是否有大于最小值(minPlus2
)的后续值,例如:
df = pd.DataFrame({'id': [1,1,1,1,1,1,1,2,2,2,2,2,2], 'value'[8,5,3,2,1,2,3,13,8,5,3,2,1]})
患者ID 1符合值(df.value[6]
)2大于最小值/最低点值1(df.value[4]
)2的标准。患者ID 2与标准不匹配,因为在其最低点值(df.value[12]
)后没有数字。在
到目前为止,我可以使用以下方法找到最低点值:
^{pr2}$我不知道一种检查B的方法,如果在mins之后有比所识别的mins大2的后续值,如果是的话,则返回到一个单独的变量中。在
理想的输出是那些大于每组最小值2的值。只要是在最小值之后,这些值的索引位置就不重要。在
dfMin =
id 1
value 1
dfMinPlus2 =
id 1
value 3
您可以尝试transform,它类似于groupby,但在聚合后返回带有原始索引的数据
更新答案:
多亏了这番评论,我才得以澄清问题,并想出了解决办法。在
要测试第一个需求(value>;=id+2的最小值),您需要一个系列来保存每个记录的id的最小值。如果您按id对dataframe进行分组并调用
value
系列的min()
方法,这就是结果。您将需要从该系列中删除索引(groupby()
方法会扰乱索引)。在为了满足第二个要求(值出现在最小值的记录之后的记录中),只需使用上面确定的
idxmin()
方法。这将返回每个记录的id的最小值的一系列索引。在然后,您可以将dataframe的
value
系列与第一个系列进行比较,并将dataframe的index
与第二个序列进行比较,中间使用一个按位的&
运算符,从而获得所需的结果(我认为)。在结果是在dataframe中生成一个新的序列,它指示给定的记录是否满足所需的条件。在
旧答案:
这个问题仍然有点不清楚(你的理想输出是什么?),但我想到了这个代码,它测试每个id的分组值,以查看是否存在一个值,即最小值的索引之后有两个索引。在
^{pr2}$有了这个,
test_id(1) == True
,test_id(2) == False
。在相关问题 更多 >
编程相关推荐