数据框中列值的计数和求和的条件函数
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
,但这似乎是一种浪费。
我有一个包含“高度”和“距离”变量的数据框。我会使用这两个提到的变量来计算“斜率”变量。 我想放置一个条件函数,从“距离”变量的第一列开始,累加(求和)值,直到它们的总和大于或等于 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
,但这似乎是一种浪费。