#python #pandas
Вопрос:
Я хочу перебрать список (преобразования) функций, которые будут применяться к каждому столбцу df фрейма данных. Функции преобразуют каждый столбец в фрейме данных, а затем добавляют их в новый фрейм данных с префиксом, обозначающим преобразование. Все это хорошо работает. Однако я не хочу применять функции log или ldf, если в столбце есть неположительные числа (hasnoneg-это фильтр). Я не знаю, где применить этот фильтр.
df = pd.DataFrame({'A':[100,105,89,45],'B':[15,14,-8,13]}) def lvl(x): return x def log(x): return np.log(x) def ldf(x): return np.log(x).diff() conversions = [lvl,log,ldf] # list of functions to apply to each series in df def convertdata(df,convlist): hasnoneg = np.invert((df lt;= 0)).all() # boolean series of which columns don't have negative values xkeys = df.columns funclist = dict(zip(xkeys,convlist)) def multi_func(functions): def f(col): return functions[col.name](col) return f return df.apply(multi_func(funclist)) ndata = [] for c in conversions: convlist = [c] * df.shape[1] temp = convertdata(df,convlist) temp.rename(columns=lambda x: c.__name__ '_' x, inplace=True) ndata.append(temp) ndata = pd.concat(ndata,axis=1) ndata
При правильной работе в таблице ниже не будет столбцов log_B и ldf_B