通过将两个数据帧与groupby进行比较来创建列

2024-06-25 06:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的数据框,上面有这样的列:

TimeHrs     A    B    SeqNum

我想弄清楚,如果按SeqNum分组的每个组的最大值A发生在最大值B的+/-2秒内。现在,我让一个groupby为每个组获取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行之内,但我不知道如何轻松地做到这一点。你知道吗


Tags: 数据距离df原始数据loc例子groupbyidxmax
1条回答
网友
1楼 · 发布于 2024-06-25 06:32:06

有什么原因不能分两步完成吗?你知道吗

在下面的示例中,您将按组查找每个列的最大值,然后使用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

相关问题 更多 >