我有一个数据帧和一系列速率。我的计算是非常简单的:行(n-1)* rate + row(n)在熊猫数据帧中
NEW_ROW(N)= NEW_ROW(N-1)*率+ old_row(N)
我有我的数据帧20列。 率是一系列20(每列1)。我用循环编写了一个代码,运行时间接近9秒。我相信,这不是做这个练习的理想方式。我想找到一种Pythonic的方式来做到这一点。
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作为系列,你应该使用熊猫函数['read_csv'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)。或者csv只有一列,或者您定义要与参数usecols一起使用的列。无论哪种情况,如果您设置'squeeze = True','read_csv'函数将返回一个Series而不是DataFrame。读完csv后,你可以设置'ret_rate.index = data.columns' – elcombato
它工作! @elcombato。我可以创建一个系列,但是,然后,只有意识到df.multiply不能处理浮动类型。只有整合者允许!无赖! – Nil