使用python中的窗口比较数据帧中具有不同频率的两列

2024-09-27 09:35:42 发布

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

我想比较一个数据帧中具有不同频率的两列。频率较小的列在最大频率期间填充相同的值,例如,如果第1列的频率比第2列低4倍:

column1 column2
1       4
1       3
1       8
1       6
2       7
2       8
2       5
2       10
3       12
3       7
3       0
3       3

我们可以看到第1列的值是如何重复的。我想做的是使用一个大小为4的居中窗口进行比较(因为frec2/frec1=4),并在这个比较中获得最大值。所以我们必须得到3个值,因为在最低频率的列中只有3个不同的值。结果必须是:

1 compared with 4,3,8,6
2 compared with 7,8,5,10
3 compared with 12,7,0,3

它们得到绝对值的最大差值,在这种情况下,三个结果值为:

7 (abs(1 - 8))
8 (abs(2 - 10))
9 (abs(3 - 12))

使用由这两列组成的通用数据帧,如何执行此操作? 先谢谢你


Tags: 数据with情况abs频率column1column2个值
1条回答
网友
1楼 · 发布于 2024-09-27 09:35:42

您可以获得column1减去column2的绝对值。然后按column1的唯一值分组,并获得column1的每个唯一值的绝对值的最大值,如下所示:

df['column1'].sub(df['column2']).abs().groupby(df['column1']).max()

结果:

column1
1    7
2    8
3    9
dtype: int64

如果希望结果显示为数据帧,可以使用:

df['column1'].sub(df['column2']).abs().groupby(df['column1']).max().reset_index(name='max_diff')

(我们将新列命名为max_diff):

结果:

   column1  max_diff
0        1         7
1        2         8
2        3         9

相关问题 更多 >

    热门问题