问题描述
我有一个包含“海拔”和“距离”变量的数据框。我将使用这两个提到的变量计算“斜率”变量。 我想放置一个条件函数,从“距离”变量的顶列开始,并将(总和)值相加,直到它们的总和大于或等于 10(>=10)。如果此条件正确,则使用给定公式计算“斜率”:Slope=Average(Altitude(from the first value to the index that the distance has stop there).请参见下图。这可能比我的方式更有意义我正在寻找坡度计算。我将不胜感激。我尝试了下面的命令系列,但很明显,它不起作用。
s=[]
for i in list(range(df.shape[0])):
if sum(df.loc[i,'distance']) < 10:
k=sum(df.loc[i,'distance'])
elif sum(df.loc[i,'distance']) > 10:
KM_mean=sum(df.loc[i,'distance'])/len(df.loc[i,'distance'])
s.append(KM_mean)
Slope=Average('Altitude')/sum('distance')
Altitude distance
11.2 0
11.2 3.018
10.9 4.18
10.1 4.873
9.9 5.499
9.4 5.923
9.2 6.415
8.5 1.063
8.4 1.667
7.9 3.114
解决方法
您必须自己跟踪累计金额。您对 sum
函数的使用只是对当前行求和。
import pandas as pd
data = [
[11.2,0],[11.2,3.018],[10.9,4.18],[10.1,4.873],[9.9,5.499],[9.4,5.923],[9.2,6.415],[8.5,1.063],[8.4,1.667],[7.9,3.114]
]
df = pd.DataFrame( data,columns=['Altitude','Distance'])
print( df )
s=[]
sumdist = 0
sumalt = 0
cntx = 0
for i in list(range(df.shape[0])):
sumdist += df.loc[i,'Distance']
sumalt += df.loc[i,'Altitude']
cntx += 1
if sumdist >= 10:
KM_mean = sumalt / cntx / sumdist
s.append(KM_mean)
sumdist = sumalt = 0
cntx = 0
if cntx:
s.append( sumalt / cntx / sumdist )
print(s)
输出:
Altitude Distance
0 11.2 0.000
1 11.2 3.018
2 10.9 4.180
3 10.1 4.873
4 9.9 5.499
5 9.4 5.923
6 9.2 6.415
7 8.5 1.063
8 8.4 1.667
9 7.9 3.114
[0.8988484798276862,0.8448607949571003,0.6933681376947548]
我想您可以跟踪当前区域的开始并反复使用 df.sum
,但这似乎是一种浪费。