我有一个大型数据框,其中的列如下:
TimeHrs A B SeqNum
我想知道SeqNum分组的每组的最大A是否发生在B的最大值的+/- 2秒内。现在,我已经得到了一个组来获取每个组的最大值。 A和B的最大值的行如下:
idxmaxA = df.loc[df.groupby(['SeqNum'])['A'].idxmax()]
idxmaxB = df.loc[df.groupby(['SeqNum'])['B'].idxmax()]
这给了我两个数据帧,每个组的索引/行的最大值为A和B.如果A的最大值在我可以添加到原始数据帧的B的最大值的2秒内,我将如何比较结果以创建一列布尔值测试?在我的情况下,TimeHrs是1秒数据,因此每行距离最后一秒是1秒。因此,我想也许比较idxmaxA中每个组的索引值落在idxmaxB的+/- 2行内,但我不确定如何轻松地做到这一点。
答案 0 :(得分:1)
你有什么理由不能分两步执行此操作吗?
在下面的示例中,您可以分组找到每列的最大值,然后使用pd.Series.between
执行比较。
import pandas as pd
df = pd.DataFrame([[8, 10, 1], [1, 4, 1], [5, 8, 1],
[5, 15, 2], [16, 10, 2], [-5, 3, 2],
[5, 10, 3], [15, 4, 3], [-5, 12, 3]],
columns=['A', 'B', 'SeqNum'])
res = df.groupby('SeqNum', as_index=False).max()
res['test'] = res['B'].between(res['A']-2, res['A']+2)
# SeqNum A B test
# 0 1 8 10 True
# 1 2 16 15 True
# 2 3 15 12 False