Я анализирую данные в Excel, который содержит несколько столбцов. Я извлек из тех столбцов, которые анализирую. исходя из некоторых условий существующего столбца, я хотел бы создать несколько новых столбцов.
Прежде всего, мой образец фрейма данных выглядит следующим образом:
df = pd.DataFrame()
df['Match'] = ['A','A','A','A','A','B','B','B','B','B',]
df['HomeGoal'] = [ 0,1,2,3,4,0,1,2,3,4]
df['AwayGoal'] = [ 0,1,2,3,4,0,1,2,3,4]
df ['AOS'] = [0.12,0.12,0.12,0.12,0.12,0.06,0.06,0.06,0.06,0.06]
df ['% Prob'] = [0.15,0.12,0.10,0.08,0.05,0.18,0.15,0.10,0.08,0.05]
Фрейм данных содержит Совпадение, ГлавнаяЦель, В гостях, AOS и % Вероятность.
Я хочу создать следующие столбцы
Homegoal <1
HomeGoal <2
HomeGoal <3
HomeGoal >=1
HomeGoal >=2
HomeGoal >=3
Каждый столбец содержит сумму% prob, которая соответствует следующим условиям:
Homegoal <1 ==> sum of the colums % Prob where Homegoal less than 1
HomeGoal <2 ==> sum of the colums % Prob where Homegoal less than 2
HomeGoal <3 ==> sum of the colums % Prob where Homegoal less than 3
HomeGoal >=1 ==> sum of the colums % Prob and AOS where Homegoal 1 goals and above
HomeGoal >=2 ===> sum of the colums % Prob and AOS where Homegoal 2 goals and above
HomeGoal >=3 ==> sum of the colums % Prob and AOS where Homegoal 2 goals and above
Все эти расчеты, упомянутые выше, основаны на каждом матче.
Могу я получить ваш совет, как это сделать?
Я прикрепил ожидаемый результат следующим образом:
Можно использовать numpy.where
Пример для 1:
import numpy as np
df['HG>=1'] = np.where(df['HomeGoal']>=1,
'insert your pass condition logic calculation here',
'insert your fail condition logic calculation here')
Я не понимаю ваших логических расчетов «годен / не годен», поэтому вам придется предоставить это или ввести сами.
Как вы вычисляли индексную строку 6
столбца HG>=1
? У меня 0.05 + 0.08 + 0.10 + 0.15 + 0.06 = 0.44
вместо 0.48
, который есть на вашем скриншоте. Если вы сделали это в Excel, почему бы просто не опубликовать формулу Excel?
Извините, это была моя ошибка в расчетах. оно должно быть 0,44. Спасибо.
Использовать:
L = [1,2,3]
for v in L:
#new column name
col = 'HG> = {}'.format(v)
#filter by condition
df1 = df[df['HomeGoal'] >= v]
#new Series filled by aggregated values per groups and added column AOS
df[col] = df1.groupby('Match')['% Prob'].transform('sum') + df['AOS']
#only first non missing value per group
mask = ~df.dropna(subset=[col]).duplicated(subset=[col, 'Match'])
df[col] = df[col].mask(~mask, 0)
for v in L:
col = 'HG>{}'.format(v)
df[col] = df[df['HomeGoal'] < v].groupby('Match')['% Prob'].transform('sum')
mask = ~df.dropna(subset=[col]).duplicated(subset=[col, 'Match'])
df[col] = df[col].mask(~mask, 0)
print (df)
Match HomeGoal AwayGoal AOS % Prob HG>=1 HG>=2 HG>=3 HG>1 HG>2 \
0 A 0 0 0.12 0.15 0.00 0.00 0.00 0.15 0.27
1 A 1 1 0.12 0.12 0.47 0.00 0.00 0.00 0.00
2 A 2 2 0.12 0.10 0.00 0.35 0.00 0.00 0.00
3 A 3 3 0.12 0.08 0.00 0.00 0.25 0.00 0.00
4 A 4 4 0.12 0.05 0.00 0.00 0.00 0.00 0.00
5 B 0 0 0.06 0.18 0.00 0.00 0.00 0.18 0.33
6 B 1 1 0.06 0.15 0.44 0.00 0.00 0.00 0.00
7 B 2 2 0.06 0.10 0.00 0.29 0.00 0.00 0.00
8 B 3 3 0.06 0.08 0.00 0.00 0.19 0.00 0.00
9 B 4 4 0.06 0.05 0.00 0.00 0.00 0.00 0.00
HG>3
0 0.37
1 0.00
2 0.00
3 0.00
4 0.00
5 0.43
6 0.00
7 0.00
8 0.00
9 0.00
Спасибо, Джез. Я попробую это с моими данными, так как сейчас меня нет.
Хорошее решение!
@koPytok - Спасибо.
Ошибок считается нулевым. Но я предоставил условие прохождения, которое является агрегированием.