使用Python2.7:
# Simplified DF
d = {'model_id': [1, 2, 4, 8, 16], 't_err':[.715130, .236947, .002106, .001043, .000512]}
pd.DataFrame(data=d)
# Slope is the variable I want to compute
model_id t_err slope
0 1 0.715130 0
1 2 0.236947 1.593640
2 4 0.002106 6.813878
3 8 0.001043 1.013115
4 16 0.000512 1.026592
我想计算每个观测值在model_id
和t_err
之间的斜率。当前我添加slope
列的代码如下所示:
def slope(x, y):
slope_list = []
for xi in range(0, len(x)-1):
denom = x[xi+1] - x[xi]
num = y[xi+1] - y[xi]
slope = num / denom
slope_list.append(slope)
return slope_list
transformx = [np.log10(1/float(x)) for x in edge_err.model_id.tolist()]
transformy = [np.log10(x) for x in edge_err.t_err.tolist()]
edge_err['slope'] = [0] + slope(transformx, transformy)
我必须转换这些数字,因为一个特殊的原因与斜率的计算无关,因此transformx
和transformy
但我确信有一种方法可以做到这一点。我见过其他问题解决这个问题,但不太适合我的情况。我该如何计算每个点之间的斜率?你知道吗
第一个观测值应保留在表中,但斜率值应为0
或NaN
。你知道吗
也可以使用assign()在一个链中完成所有操作:
由于某些原因,pandas中没有包含对数函数,但它与numpy函数一起使用非常简单(而且非常有效)。你知道吗
如果NaN足够,您可以简单地删除
fillna
函数调用。你知道吗相关问题 更多 >
编程相关推荐