У меня есть кадр данных и серия тарифов. Мой расчет очень прост:строка (n-1) * rate + row (n) в кадре данных pandas
NEW_ROW (п) = NEW_ROW (п-1) * ставка + old_row (п)
У меня есть 20 столбцов в моей dataframe. ставка - это серия из 20 (по 1 для каждого столбца). Я написал код с использованием циклов, которые занимают почти 9 секунд для запуска. Я считаю, что это не идеальный способ сделать это упражнение. Я бы хотел найти питонический способ сделать это.
data = pd.read_csv('data.csv')
ret_rate = pd.read_csv('Retention_Rate.csv')
ret_dat = data.copy()
for i in range(4, ret_dat.shape[1]):
for j in range(1, ret_dat.shape[0]):
if (ret_dat['MARKET_ID'][j] == ret_dat['MARKET_ID'][j-1]):
ret_dat.iloc[j, i] = ret_dat.iloc[j, i] + ret_rate.iloc[i-4,0]*ret_dat.iloc[j-1, i]
ret_dat.to_csv('adstock_data_v3.csv')
Я поместил данные in a Google sheet.
ret_rate имеет значения в csv. сталкиваясь с трудностями в преобразовании этого в ряд с индексом, который является data.columns. любая помощь с этим пожалуйста ... 'ret_rate_s = pd.Series (ret_rate.ix [:, 0], index = data.columns)' дает мне все NaN – Nil
Чтобы прочитать csv как серию, вы должны использовать панды function ['read_csv'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html). Либо csv имеет только один столбец, либо вы определяете столбец для использования с параметром 'usecols'. В любом случае, если вы задали 'squeeze = True', функция' read_csv' возвращает серию вместо DataFrame. И после прочтения csv вы можете установить 'ret_rate.index = data.columns' – elcombato
Это сработало! @elcombato. Я мог бы создать серию, но потом, только чтобы понять, что df.multiply не может обрабатывать тип float. Разрешены только Intergers! облом! – Nil