使用 python 中的 window 比较数据框中具有不同频率的 2 列
Compare 2 columns with different frequencies in a data frame using a window in python
我想比较具有不同频率的数据框的 2 列。在最大频率期间,频率较小的列填充相同的值,例如,如果我们的第 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 的居中 window 进行比较(因为 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))
我如何使用由这两列组成的通用数据框来执行此操作?
提前谢谢你。
您可以获得 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
我想比较具有不同频率的数据框的 2 列。在最大频率期间,频率较小的列填充相同的值,例如,如果我们的第 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 的居中 window 进行比较(因为 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))
我如何使用由这两列组成的通用数据框来执行此操作? 提前谢谢你。
您可以获得 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