【发布时间】:2023-03-09 08:35:01
【问题描述】:
我有一个数据框,其中包括名为“海拔”、“距离”、“坡度”的三列。 “坡度”列是使用前两列“高度”、“距离”计算的。 @第一步的目的是使用下面解释的条件计算“斜率”: 部署了一个条件函数,从“距离”变量的顶部列开始,并将值相加(总和),直到它们的总和大于或等于 10 (>=10)。如果这种情况得到纠正,则使用给定的公式计算“坡度”:坡度=平均(海拔)/(总和(距离))。 “距离”的总和是从该值的第一个值计数到“距离”已停在那里的索引)。 以下代码用于上述说明(作者 Tim Roberts):
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
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)
输出:斜率:[0.8988484798276862, 0.8448607949571003, 0.6933681376947548]
我的问题:然后下一部分:
我将从代码中重复收到的号码:[0.8988484798276862, 0.8448607949571003, 0.6933681376947548]。我希望通过与之关联的行数来重复每个数字。例如,0.8988484798276862 将在新列中重复四次,然后 0.8448607949571003 将重复两次,依此类推
我在下面写了一个代码,但它返回空值:
RR=[]
for i in list(range(df.shape[0])):
sumdist += df.loc[i,'Distance']
sumalt += df.loc[i,'Altitude']
cntx += 1
if sumdist >= 10:
R_s=np.repeat(df['Slope'].to_numpy())
RR.append(R_s)
RR=DataFrame(RR)
【问题讨论】:
-
你能用更精确的方式写下你的问题吗?我真的不明白需要做什么。
-
您能否澄清一下您所说的“与斜坡相关的值”是什么意思。数字 4 和 2 来自哪里?还请包括您对所提供数据的预期输出。这有助于进一步阐明数据应采用的格式。请参阅 MRE - Minimal, Reproducible, Example 和 How to make good reproducible pandas examples。
-
谢谢亨利。我想重复接收到的“坡度”值,该值位于新列中的三行,从第一行到最后。声誉的数量取决于条件“距离”值的总和应大于或等于 10(sum(distance>=10)。例如,对于“坡度”的第一项,即 0.898848,将在新列中重复四次,因为总和'Distance'的前四个值大于10。然后为'Distance'的下两个值(从索引4到5)计算Slope的第二个值,请见图
标签: python pandas dataframe numpy