【发布时间】:2022-01-08 04:11:34
【问题描述】:
我在使用 pandas 数据框的“for 循环”时遇到问题,希望有人能提供帮助。
我在 csv 文件中有以下数据框:
,forename,surname,gender,age,100m,200m,400m,800m,1500m
0,Migdalia,Parrish,F,18,11.08,29.0,59.41,122.05,259.11
1,Valerie,Lee,F,10,17.23,46.0,100.02,232.64,480.95
2,John,Debnam,M,17,10.81,25.89,50.6,110.29,232.39
3,Roy,Miller,M,10,19.18,46.74,95.32,201.14,430.27
4,Aida,Aumiller,F,11,15.3,41.83,81.06,189.03,394.9
5,Marcia,Brown,F,19,11.13,24.62,57.59,119.13,256.37
6,Harry,Knows,M,16,12.39,25.94,49.67,106.56,237.14
7,Barry,Lennon,M,14,11.15,23.56,46.46,110.89,230.49
8,Lilia,Armstrong,F,13,8.84,25.09,59.54,128.95,258.47
9,Johnny,Casey,M,15,9.65,22.67,49.46,112.85,233.87
10,Donald,Taylor,M,15,11.74,22.42,49.22,114.62,224.63
11,Martha,Woods,F,14,9.01,24.34,55.25,118.8,254.87
12,Diane,Lauria,F,15,8.99,27.92,54.79,119.89,249.21
13,Yvonne,Pumphrey,F,16,8.84,27.29,57.63,123.13,247.41
14,Betty,Stephenson,F,14,11.04,28.73,59.05,126.29,256.44
15,Lilia,Armstrong,F,12,11.31,34.43,74.28,150.05,321.07
我必须创建一个调用另一个函数的主函数,该函数使用“for 循环”检索每个年龄 (10,11,12,13,14,15,16) 时间最快的运动员特定的性别(例如“F”)和距离(例如“100m”)。
例如:
Input:
fastest_athletes = find_fastest_athletes(df,"100m","F",[10,11,12,13,14,15,16])
Output:
{
10: {’forename’: 'Valerie’, 'surname’: 'Lee’, 'time’: '17.23’},
11: {’forename’: 'Aida’, 'surname’: 'Aumiller’, 'time’: '15.3’},
12: {’forename’: 'Lilia’, 'surname’: 'Armstrong’, 'time’: '11.31’},
13: {’forename’: 'Lilia’, 'surname’: 'Armstrong’, 'time’: '8.84’},
14: {’forename’: 'Martha’, 'surname’: 'Woods’, 'time’: '9.01’},
15: {’forename’: 'Diane’, 'surname’: 'Lauria’, 'time’: '8.99’},
16: {’forename’: 'Yvonne’, 'surname’: 'Pumphrey’, 'time’: '8.84’}
}
我做了以下代码:
# Function with the for loop
def find_fastest_athletes(df,distance,gender,ages):
for age in range(10,16):
fastest_athletes = df[(df["gender"] == gender) & (df["age"] == age)]
fastest_athletes_sorted = fastest_athletes.sort_values(distance,ascending=True)
fastest_athletes_value = fastest_athletes_sorted.iloc[[0]][["forename","surname","100m"]]
athletes_data = fastest_athletes_value.to_string(index=False, header=False).split(' ')
athletes_data_dict = {
'forename': athletes_data[0].strip(),
'surname': athletes_data[1],
'time': float(athletes_data[2])
}
return athletes_data_dict
# Main function
def main(filename='athletes.csv'):
df = pd.read_csv(filename, index_col=0)
df['100m'] = df['100m'].astype(float)
print(find_fastest_athletes(df,'100m','F',[10,11,12,13,14,15,16]))
return
if __name__ == "__main__":
main()
通过我的编码,我得到的输出只有上一个年龄段(16 岁)的最快运动员,而不是每个年龄段(10、11、12、13、14、15、16)的所有最快运动员,为什么那个?
另外如何在每行的开头添加年龄?
【问题讨论】: