数据框中列值的计数和求和的条件函数

Condition function on counting and summation of values of a column in a dataframe

我有一个包含“高度”和“距离”变量的数据框。我会使用这两个提到的变量来计算“斜率”变量。 我想放置一个条件函数,从“距离”变量的第一列开始,累加(求和)值,直到它们的总和大于或等于 10 (>=10)。如果此条件正确,则使用给定公式计算“斜率”:Slope=Average(Altitude(从第一个值到距离已停在那里的索引)。请参见下图。它可能比我的方式更有意义我正在寻找斜率计算。我将不胜感激任何帮助。我尝试了下面的命令系列,但显然,它不起作用。

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,但这似乎是一种浪费。