Я пытаюсь улучшить свои методы кодирования при написании функций. Моя конечная цель - получить количество времени, которое потребовалось для выполнения sh типа задачи в конкретной c команде. У меня есть стартовый фрейм данных с кодом:
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
Это не кажется мне правильным.