Преобразуйте df временных рядов в разницу в журнале, но исключите временные ряды, в которых исходное значение имеет отрицательное значение

#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

Выход