python - 根据条件重复列的值
问题描述
我有一个数据框,包括名为“高度”、“距离”、“坡度”的三列。“坡度”列是使用前两列“高度”、“距离”计算的。@第一步,目的是使用下面解释的条件计算“斜率”:部署了一个条件函数,从“距离”变量的顶列开始,并将(总和)值相加,直到它们的总和更大或等于 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)
解决方案
计算后使用此代码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
并插入它们的次数与计数显示的一样多。重置sum,count并继续。
推荐阅读
- node.js - 是否可以使用 api node.js 在 Wave 区块链网络中生成钱包?
- node.js - 如何在返回和下一个函数回调后停止承诺进一步执行?
- angular - 识别组件发射输出属性
- android - Android Studio 3.4.1,Kotlin“未解决的参考:mutableListOf”
- css - Angular Material mat-icon-button,在 Ionic 中垂直对齐文本
- html - 如何在标题 div 下移动我的视差背景图像
- c# - 提取安全组成员时服务器上没有此类对象
- angular - Angular 使用中的 Merge Map 运算符
- azure - ProcessEventsAsync 中的延迟检查点
- mongodb - 复制处于活动状态时无法删除“本地”数据库