Мне нужно применить некоторую логику к нескольким столбцам, но все, что я мог сделать, это просто написать это по одному (и это не так, как в Python).
import numpy as np
import pandas as pd
data = {
'Ticker':['S&P','Kospi','FTSE','DAX','Topix'],
'P/E_Cur':[26,21,16,14,23],
'P/E_lag_1yr':[22,14,28,31,18],
'P/E_lag_2yr':[17,11,13,np.NaN,10],
'P/E_lag_3yr':[np.NaN,np.NaN,12,14,15]
}
df = pd.DataFrame(data)
Текущий P / E находится на максимуме за 4 года, и текущее значение увеличилось более чем на 10% за последние 3 года.Если какое-либо из этих условий выполнено, Flag будет 1 или 0. Но если какое-либо поле столбца имеет значение Null, то flag также должно быть равно Null.Все, что я мог написать, - это вручную написать весь код
c1 = df['P/E_Cur'].notnull()
c2 = df['P/E_lag_1yr'].notnull()
c3 = df['P/E_lag_2yr'].notnull()
c4 = df['P/E_lag_3yr'].notnull()
c5 = df['P/E_Cur']>df['P/E_lag_1yr']
c6 = df['P/E_Cur']>df['P/E_lag_2yr']
c7 = df['P/E_Cur']>df['P/E_lag_3yr']
c8 = (df['P/E_Cur']/df['P/E_lag_3yr']-1)>0.1
df['P/E_flag'] = np.where(c1&c2&c3&c4,np.where(c5&c6&c7&c8,1,0), np.NaN)
Я хочу написать всю эту логику на python (умном) пути.