2017-02-16 102 views
1

发展因子从时刻到时间吨+ 1是A吨+ 1/A。我想这种计算应用到数据帧熊猫看起来像下面:计算发育因子使用大熊猫数据帧

 
    T0 T1 T2 
0 100 200 250 
1 80 120 150 

another post开始,我尝试以下

f = lambda x: np.divide(x[1], x[0]) 
df.applymap(f, axis=1) 

但我得到一个错误的索引错误。我想输出是

 
    T0_T1 T1_T2 
0 2.0 1.25 
1 1.5 1.25 
+0

有什么错误?你也应该发布错误消息。 –

回答

1

IIUC您需要更改applymapapply

f = lambda x: np.divide(x[1], x[0]) 
df1 = df.apply(f, axis=1) 
print (df1) 
0 2.0 
1 1.5 
dtype: float64 

如果功能比较复杂:

def f(x): 
    print (x) 
    #add code 
    return x.T1/x.T0 

df1 = df.apply(f, axis=1) 
print (df1) 
0 2.0 
1 1.5 
dtype: float64 

但更好的是使用矢量更快的解决方案与div

print (df.T1.div(df.T0)) 
0 2.0 
1 1.5 
dtype: float64 

print (df.T1/df.T0) 
0 2.0 
1 1.5 
dtype: float64 

的CommNet通过编辑:

除以shift版DF,最后由iloc除去第一列:

df1 = df.div(df.shift(axis=1)) 
print (df1) 
    T0 T1 T2 
0 NaN 2.0 1.25 
1 NaN 1.5 1.25 

df1 = df1.iloc[:,1:] 
print(df1) 
    T1 T2 
0 2.0 1.25 
1 1.5 1.25 
+0

我编辑的问题,以澄清我的意图,我明白如何划分两个单独的列,但我想将计算应用于整个DataFrame, –