如何计算两列之间的归一化互信息 (NMI) 并以 5 为窗口滚动?

问题描述 投票:0回答:0

我想为两列的每 5 行计算归一化互信息 (NMI)。 例如,我有一个包含两列的 df:

| Column_A | Column_B |
0   3.0 5.75
1   6.0 3.75
2   1.0 6.25
3   0.0 0.00
4   1.0 18.00
5   5.0 12.50

我想计算两列前三行的 NMI:

| Column_A | Column_B |
0   3.0 5.75
1   6.0 3.75
2   1.0 6.25

,然后移至[1:3]: |列_A |列_B | 1 6.0 3.75 2 1.0 6.25 3 0.0 0.00 , 和 [2:4]:

| Column_A | Column_B |
2   1.0 6.25
3   0.0 0.00
4   1.0 18.00

我试过了

df[['Column_A ','Column_B ']].rolling(window = 5).apply(lambda x: normalized_mutual_info_score(df['Column_A '],df['Column_A ']),raw=True)

我得到的结果是这样的:

| Column_A | Column_B |
0   NaN NaN
1   NaN NaN
2   NaN NaN
3   NaN NaN
4   0.817271    0.817271

然而,前5行手动计算的结果是0.9057460992755193;我使用的方法是:

df = df[['count_incident','count_nonincident']].head(5)
df_1 = normalized_mutual_info_score(df['Column_A '],df['Column_B '])
df_1

我想知道是否有人可以帮助修复我的代码

df[['Column_A ','Column_B ']].rolling(window = 5).apply(lambda x: normalized_mutual_info_score(df['Column_A '],df['Column_B ']),raw=True)

或任何其他方式来实现结果。

我也体会到结果通过rolling和apply来保持一致...应该是不同组不一样吧

非常感谢!

python pandas apply rolling-computation
© www.soinside.com 2019 - 2024. All rights reserved.