【发布时间】:2020-07-20 22:37:49
【问题描述】:
我正在尝试在编写函数时改进我的编码实践。我的最终目标是获得在特定团队中完成某类任务所需的时间。我有一个带有代码的起始数据框:
data = {'Team':['A', 'A', 'A', 'B','B','B','A','B'], 'Time':[20, 21, 19, 18,17,15,22,25],'Type':['Bike', 'Car', 'Walk', 'Scooter','Bike', 'Car', 'Walk', 'Scooter']}
df_new = pd.DataFrame(data)
然后我写一个函数,比如:
def timer(df):
team_A = df[df['Team'] == 'A']
team_A_time_total = team_A.Time.sum()
team_A_biketime_ = (team_A[team_A['Type'] == 'Bike'].Time.sum() / team_A_time_total)
team_A_cartime_ = (team_A[team_A['Type'] == 'Car'].Time.sum() / team_A_time_total)
team_A_walktime_ = (team_A[team_A['Type'] == 'Walk'].Time.sum() / team_A_time_total)
team_A_scootertime_ = (team_A[team_A['Type'] == 'Scooter'].Time.sum() / team_A_time_total)
team_B = df[df['Team'] == 'B']
team_B_time_total = team_A.Time.sum()
team_B_biketime_ = (team_B[team_B['Type'] == 'Bike'].Time.sum() / team_A_time_total)
team_B_cartime_ = (team_B[team_B['Type'] == 'Car'].Time.sum() / team_A_time_total)
team_B_walktime_ = (team_B[team_B['Type'] == 'Walk'].Time.sum() / team_A_time_total)
team_B_scootertime_ = (team_B[team_B['Type'] == 'Scooter'].Time.sum() / team_A_time_total)
return team_A_biketime_,team_A_cartime_, team_A_walktime_, team_A_scootertime_,team_B_biketime_,team_B_cartime_, team_B_walktime_, team_B_scootertime_
我知道这段代码可以用更简洁的方式编写,但很难让它正确。我尝试过:
def timer(df):
types = ['Bike','Car','Walk','Scooter']
teams = ['A','B']
for team in teams:
df_team = df[df['Team'] == team]
df_team_time = df_team.Time.sum()
for value in types:
df_value = df_team[df_team['Type'] == value]
df_value_time = df_value.Time.sum() / df_team_time
return df_value_time
这对我来说似乎不正确。
【问题讨论】:
标签: python pandas loops dataframe for-loop