Этот вопрос был немного расплывчатым, но я отвечу на вопрос, который, как мне кажется, лежит в основе того, что вы спрашиваете:
Допустим, вы начинаете с матрицы:
df1 = pd.DataFrame(np.random.randn(8, 4),columns=['A', 'B', 'C', 'D'])
Что создает:
A B C D
0 2.464130 0.796172 -1.406528 0.332499
1 -0.370764 -0.185119 -0.514149 0.158218
2 -2.164707 0.888354 0.214550 1.334445
3 2.019189 0.910855 0.582508 -0.861778
4 1.574337 -1.063037 0.771726 -0.196721
5 1.091648 0.407703 0.406509 -1.052855
6 -1.587963 -1.730850 0.168353 -0.899848
7 0.225723 0.042629 2.152307 -1.086585
Теперь вы можете использовать pd.df.shift()
, чтобы сместить всю матрицу, а затем проверить получившиеся столбцы элемент за элементом за один шаг.Например:
df1.shift(1)
Создает:
A B C D
0 -0.370764 -0.185119 -0.514149 0.158218
1 -2.164707 0.888354 0.214550 1.334445
2 2.019189 0.910855 0.582508 -0.861778
3 1.574337 -1.063037 0.771726 -0.196721
4 1.091648 0.407703 0.406509 -1.052855
5 -1.587963 -1.730850 0.168353 -0.899848
6 0.225723 0.042629 2.152307 -1.086585
7 NaN NaN NaN NaN
И теперь вы можете проверить получившиеся столбцы с новой матрицей следующим образом:
df2 = df1.shift(-1) > df1
, которая возвращает:
A B C D
0 False False True False
1 False True True True
2 True True True False
3 False False True True
4 False True False False
5 False False False True
6 True True True False
7 False False False False
Чтобы завершить ваш вопрос, мы конвертируем True / False в 1/0 следующим образом:
df2 = df2.applymap(lambda x: 1 if x == True else 0)
, который возвращает:
A B C D
0 0 0 1 0
1 0 1 1 1
2 1 1 1 0
3 0 0 1 1
4 0 1 0 0
5 0 0 0 1
6 1 1 1 0
7 0 0 0 0
В одномстрока:
df2 = (df1.shift(-1)>df1).replace({True:1,False:0})