首页 > 解决方案 > 根据条件重复列的值

问题描述

我有一个数据框,包括名为“高度”、“距离”、“坡度”的三列。“坡度”列是使用前两列“高度”、“距离”计算的。@第一步,目的是使用下面解释的条件计算“斜率”:部署了一个条件函数,从“距离”变量的顶列开始,并将(总和)值相加,直到它们的总和更大或等于 10 (>=10)。如果这种情况得到纠正,则使用给定的公式计算“坡度”:坡度=平均(海拔)/(总和(距离))。“距离”的总和是从该值的第一个值计数到“距离”已停在那里的索引)。以下代码用于上述解释(蒂姆罗伯茨):

   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)

在此处输入图像描述

标签: pythonpandasdataframenumpy

解决方案


计算后使用此代码s以获取具有所需值的斜率列:

sum_distance = 0
count = 0
idx = 0
slopes = []

for i in df['Distance'].values:
    idx += 1
    sum_distance += i
    if sum_distance>=10:
        slopes += [s[count]]*idx
        count += 1
        sum_distance = 0
        idx = 0

if idx > 0:
    slopes += [s[count]]*idx

df['Slope'] = slopes

输出:

>>> df
   Altitude  Distance     Slope
0      11.2     0.000  0.898848
1      11.2     3.018  0.898848
2      10.9     4.180  0.898848
3      10.1     4.873  0.898848
4       9.9     5.499  0.844861
5       9.4     5.923  0.844861
6       9.2     6.415  0.693368
7       8.5     1.063  0.693368
8       8.4     1.667  0.693368
9       7.9     3.114  0.693368

遍历了距离列,总结了这些值并保留了遍历的值的计数。每当总和为 10 或更多时,从中选择值s并插入它们的次数与计数显示的一样多。重置sumcount并继续。


推荐阅读