Сравнить текущее значение столбца с другим значением столбца по строкам - PullRequest
0 голосов
/ 09 февраля 2020

Предполагая, что кадр данных подобен этому

In [5]: data = pd.DataFrame([[9,4],[5,4],[1,3],[26,7]])                         

In [6]: data                                                                    
Out[6]: 
    0  1
0   9  4
1   5  4
2   1  3
3  26  7

Я хочу подсчитать, сколько раз значения в скользящем окне / срезе 2 в столбце 0 больше или равны значению в столбце 1 (4) .

Для первого числа 4 в столбце 1 срез 2 в столбце 0 дает 5 и 1, поэтому на выходе будет 2, поскольку оба числа больше 4, а затем на втором 4 следующий слайс значения в столбце 0 будут равны 1 и 26, поэтому на выходе будет 1, потому что только 26 больше 4, но не 1. Я не могу использовать скользящее окно, поскольку итерация по значениям скользящего окна не реализована.

Мне нужно что-то вроде среза предыдущих n строк, а затем я могу повторять, сравнивать и подсчитывать, сколько раз любое из значений в этом срезе находится выше текущей строки.

1 Ответ

0 голосов
/ 10 февраля 2020

Я сделал это, используя list вместо того, чтобы делать это в data frame. Проверьте код ниже:

list1, list2 = df['0'].values.tolist(),  df['1'].values.tolist()
outList = []
for ix in range(len(list1)):
    if ix < len(list1) - 2:
        if list2[ix] < list1[ix + 1] and list2[ix] < list1[ix + 2]:
            outList.append(2)
        elif list2[ix] < list1[ix + 1] or list2[ix] < list1[ix + 2]:
            outList.append(1)
        else:
            outList.append(0)
    else:
        outList.append(0)

df['2_rows_forward_moving_tag'] = pd.Series(outList) 

Выход:

    0  1  2_rows_forward_moving_tag
0   9  4                          1
1   5  4                          1
2   1  3                          0
3  26  7                          0
...