【问题标题】:Condition function inclusing a formula on counting and summation of values of columns in a dataframe条件函数,包括对数据框中列的值进行计数和求和的公式
【发布时间】:2021-08-08 22:58:35
【问题描述】:

这篇文章是这个问题here的延续。

我有一个数据框,其中包含名为“海拔”、“距离”、“坡度”的三列。 'Slope' 列应使用前两列 'Altitude'、'Distance' 计算。

首先,目的是使用解释为的条件计算“坡度”:部署了一个条件函数,从“距离”变量的顶列开始,并累加(求和)值,直到它们的总和更大或等于 10 (>=10)。如果此条件为真,则使用给定公式计算“斜率”:Slope=(Differential of 'Altitude')/(sum(Distance))

“距离”的总和从第一个值开始,直到“距离”的总和 >= 10 的索引。此外,差分“高度”表示:每个分区中的 Last value of Altitude - First value of Altitude

我试着画一个图来更好地说明。

[![在此处输入图片描述][1]][1]

以下代码(由 Tim Roberts 编写)是最初所做的。它使用“KM_mean”公式。我希望使用我上面的解释在这篇文章中更正和修改它:


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)


  [1]: https://i.stack.imgur.com/OPdXw.jpg

【问题讨论】:

  • 嗨@Allin 请编辑您的帖子以使其更易于理解。上一个问题和图片的链接也没有出现。

标签: python pandas dataframe numpy


【解决方案1】:

通过您在上一个问题中提到的“坡度”计算的变化,我已经相应地修改了代码。试试这个:

sum_distance = 0
idx = 0
prev_idx = -1
slopes = []

for idx, i in enumerate(df.Distance.values):
    sum_distance += i
    if sum_distance >= 10:
        slopes += [(df.Altitude.iloc[idx] - df.Altitude.iloc[prev_idx + 1]) / sum_distance] * (idx - prev_idx)
        sum_distance = 0
        prev_idx = idx

if idx != prev_idx:
    slopes += [(df.Altitude.iloc[idx] - df.Altitude.iloc[prev_idx + 1]) / sum_distance] * (idx - prev_idx)
    
df['Slope'] = slopes

输出:

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

代码对“距离”求和,并在总和为 10 或更大时进行跟踪,然后计算差分“高度”,最后使用上述公式计算坡度。

【讨论】:

猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多