通过将两个数据框与groupby

时间:2018-03-27 21:12:41

标签: python pandas

我有一个大型数据框,其中的列如下:

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行内,但我不确定如何轻松地做到这一点。

1 个答案:

答案 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