Я новичок в Python и пытаюсь улучшить свой код - поэтому я был бы признателен за несколько советов о том, как повысить эффективность следующего.
У меня есть следующий набор данных:
petdata = {
'animal' : ['dog', 'cat', 'fish'],
'male_1' : [0.57, 0.72, 0.62],
'female_1' : [0.43, 0.28, 0.38],
'age_01_1': [0.10,0.16,0.15],
'age_15_1':[0.17,0.29,0.26],
'age_510_1':[0.15,0.19,0.19],
'age_1015_1':[0.18,0.16,0.17],
'age_1520_1':[0.20,0.11,0.12],
'age_20+_1':[0.20,0.09,0.10],
'male_2' : [0.57, 0.72, 0.62],
'female_2' : [0.43, 0.28, 0.38],
'age_01_2': [0.10,0.16,0.15],
'age_15_2':[0.17,0.29,0.26],
'age_510_2':[0.15,0.19,0.19],
'age_1015_2':[0.18,0.16,0.17],
'age_1520_2':[0.20,0.11,0.12],
'age_20+_2':[0.20,0.09,0.10],
'weight_1': [10,20,30],
'weight_2':[40,50,60]
}
df = pd.DataFrame(petdata)
Я хочу рассчитать средневзвешенное значение для животных в моем наборе данных, используя weight_1 для всех переменных, заканчивающихся на «_1» и weight_2 для всехпеременные, которые заканчиваются на «_2».
В настоящее время я делаю это следующим образом:
df['male_wav_1']=np.nansum((df['male_1']*df['weight_1'])/df['weight_1'].sum())
df['female_wav_1']=np.nansum((df['female_1']*df['weight_1'])/df['weight_1'].sum())
df['male_wav_2']=np.nansum((df['male_2']*df['weight_2'])/df['weight_2'].sum())
df['female_wav_2']=np.nansum((df['female_2']*df['weight_2'])/df['weight_2'].sum())
И это для каждого отдельного столбца в моем фрейме данных (т.е. age_01_1_wav, age_15_1_wav ...) Я понимаю, что это не такочень аккуратно, поэтому кто-нибудь может дать мне несколько советов о том, как улучшить процесс?
Я пытался:
- изменить данные с широкого на длинный
- определить функцию для средневзвешенного значения
НоЯ был неудачным с обоими. Проблема не в изменении формы, я могу это сделать, но у меня нет ясности относительно того, как применять разные веса к различным группам, которые у меня есть в моих данных.
Большое спасибо за любую помощь.