Мне нужен эффективный и общий подход к созданию нового логического столбца в кадре данных, основанный на сравнении нескольких строк столбца с несколькими строками другого столбца (столбцов).Под множественными строками я подразумеваю текущую строку столбца и одну или несколько задержек этого столбца (т.е. df ['column']. Shift (1). Прямо сейчас я создаю логическое сравнение для каждого столбца в моем фрейме данных.Пример ниже, у меня есть только 3 столбца. Я надеюсь, что есть способ использовать any () или all () для создания более эффективного логического сравнения для случая, когда у меня может быть 50 столбцов для проверки.
IЯ уже успешно создал столбец, написав подробные условия для каждого столбца и поместив критерии в оператор np.where (). Этот подход не будет работать, если мне нужно проверить 50 столбцов.
Этот код создает исходный кодdataframe:
import numpy as np
import pandas as pd
df = pd.DataFrame({'C1':[3,2,8,6,6,7,8],'C2':[5,4,6,4,8,3,2],'C3': [5,4,6,7,8,6,4],
'Year':[2012,2013,2014,2015,2016,2017,2018]})
df.set_index('Year', inplace=True)
df1 =df[::-1]
df1
Для примера, который я привожу, я стремлюсь создать столбец «Success», который равен 1, если столбец cany равен 8, а столбец под ним (предыдущий год) меньше 8.Вот что я сделал до сих пор:
Criteria_1 = ( (df1['C1']==8) & (df1['C1'] > df1['C1'].shift(-1) ) |
(df1['C2']==8) & (df1['C2'] > df1['C2'].shift(-1) )|
(df1['C3']==8) & (df1['C3'] > df1['C3'].shift(-1) )
)
df1['Sucess']=np.where(Criteria_1,1,0)
Я хотел бы видеть тот же вывод, что и в приведенном выше коде, но с более кратким кодом, использующим может быть any (), чтобы я мог cскажем, если какой-либо столбец удовлетворяет вышеуказанному условию, успех должен быть равен 1. ![enter image description here](https://i.stack.imgur.com/a5S8J.png)