рдЧреНрд░реЗрдЯ рдЕрдЬрдЧрд░ рд╕реНрдкреЛрд░реНрдЯреНрд╕ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓



рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдореИрдВ рдЯреНрд░рд╛рдпрдерд▓реЙрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдЦреЗрд▓ рджреБрдирд┐рдпрд╛ рдХреЗ рдХрдИ рджреЗрд╢реЛрдВ рдореЗрдВ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрдпреБрдХреНрдд рд░рд╛рдЬреНрдп рдЕрдореЗрд░рд┐рдХрд╛, рдСрд╕реНрдЯреНрд░реЗрд▓рд┐рдпрд╛ рдФрд░ рдпреВрд░реЛрдк рдореЗрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд░реВрд╕ рдФрд░ рд╕реАрдЖрдИрдПрд╕ рджреЗрд╢реЛрдВ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд╢реМрдХреАрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╕реБрдмрд╣ рдкреВрд▓ рдореЗрдВ рддреИрд░рдиреЗ, рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рдиреЗ рдФрд░ рдЬреЙрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рдЯреНрд░рд╛рдпрдерд▓реЙрди рдореЗрдВ рдкреЗрд╢реЗрд╡рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд┐рдирд╛ рднреА рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреИрдпрд╛рд░реА рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рджреЛрд╕реНрддреЛрдВ рдХреЗ рдмреАрдЪ рдХрдо рд╕реЗ рдХрдо рдПрдХ "рд▓реМрд╣ рдкреБрд░реБрд╖" рдпрд╛ рдХреЛрдИ рд╣реИ рдЬреЛ рдПрдХ рдмрдирдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рджреНрд░рд╡реНрдпрдорд╛рди, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рджреВрд░реА рдФрд░ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ, рдПрдХ рдореЗрдВ рддреАрди рдЦреЗрд▓ - рдпрд╣ рд╕рдм рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рд╣рд░ рд╕рд╛рд▓, рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрдИ рд╕реМ рдЯреНрд░рд╛рдпрдерд▓реЙрди рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдХрдИ рд╕реМ рд▓реЛрдЧ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВредрдХрдИ рдЖрдпреЛрдЬрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдПрдВ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд░реВрд╕ рдФрд░ рдХреБрдЫ рд╕реАрдЖрдИрдПрд╕ рджреЗрд╢реЛрдВ рдХреЗ рдПрдерд▓реАрдЯреЛрдВ рдХреЗ рд▓рд┐рдП, рдЯреАрдоtristats.ru рдПрдХ рд╣реА рдирд╛рдо рдХреА рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ - рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдЬрдЧрд╣ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рдФрд░ рдЖрдкрдХреЗ рдорд┐рддреНрд░реЛрдВ рдФрд░ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рдпреЛрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдкрдХреА рдореВрд░реНрддрд┐рдпреЛрдВ, рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕рдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджрд┐рдпрд╛ред рддреНрд░реИрд▓рд┐рдлрд╝ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо: рдкрдврд╝реЗрдВ ред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рдореЗрд░реА рдкрд╣рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдереА, рдХреНрдпреЛрдВрдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА рдЕрдЬрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдХрд╛рдо рдХреЗ рддрдХрдиреАрдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж рд╕реЗ, рд╡рд┐рднрд┐рдиреНрди рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╕рд╛рдордиреЗ рдЖрдИрдВ, рдХрднреА-рдХрднреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ, рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛, рдЕрдкреВрд░реНрдг рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирдореВрдирд╛ рдмрдирд╛рдирд╛, рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди, рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рднреАред

рдорд╛рддреНрд░рд╛ рдмрдбрд╝реА рд╣реЛ рдЧрдИ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдкрд╛рдВрдЪ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджрд┐рдпрд╛, рддрд╛рдХрд┐ рдореИрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХреВрдВ рдФрд░ рдпрд╛рдж рд░рдЦреВрдВ рдХрд┐ рдмреНрд░реЗрдХ рдХреЗ рдмрд╛рдж рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред

рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЕрдзреНрдпрдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдореЗрд░реЗ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд░рд╕реЛрдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ 10-15 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкрдврд╝ рд▓рд┐рдпрд╛? рддреЛ рдЪрд▓рддреЗ рд╣реИрдВ!

рднрд╛рдЧ 1. рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ


рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП: рд╡реЗрдмрд╕рд╛рдЗрдЯ tristats.ru ред рдЗрд╕ рдкрд░ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдмрд▓ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд░реВрдЪрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдирд╕реНрд▓реЛрдВ рдХреА рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИред





рдирдВрдмрд░ рдПрдХ рдХрд╛рд░реНрдп рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрдирд╛ рдерд╛ред рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЙрд╕ рд╕рдордп рдореИрдВ рд╡реЗрдм рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рддреБрд░рдВрдд рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╢реБрд░реБрдЖрдд рдХреА рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рдерд╛ - рдкреГрд╖реНрда рдХреЛрдб рдХреЛ рджреЗрдЦреЛред рдпрд╣ рд╕рд╣реА рдорд╛рдЙрд╕ рдмрдЯрди рдпрд╛ F12 рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред



Chrome рдореЗрдВ рдореЗрдиреВ рдореЗрдВ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ: рдкреГрд╖реНрда рдХреЛрдб рдФрд░ рджреГрд╢реНрдп рдХреЛрдб рджреЗрдЦреЗрдВ ред рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рднрд╛рдЬрди рдирд╣реАрдВред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВред рд╡рд╣ рдЬреЛ рдХреЛрдб рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рдпрд╣ F12 рдЬреИрд╕рд╛ рд╣реА рд╣реИ - рд╕реАрдзреЗ рд╢рд╛рдмреНрджрд┐рдХ html- рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рддрддреНрд╡-рд╡рд╛рд░ рд╣реИред



рдмрджрд▓реЗ рдореЗрдВ, рдкреЗрдЬ рдХреЛрдб рджреЗрдЦрдиреЗ рд╕реЗ рдкреЗрдЬ рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ html , рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЬреЗрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд╛рдо рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдареАрдХ рд╣реИред



рдЕрдм рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рдХреЛрдб рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рдореИрдВ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ:

import requests

r = requests.get(url='http://tristats.ru/')
print(r.content)

рдФрд░ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ ... рд╕реНрд░реЛрдд рдХреЛрдбред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ, рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рдЖрд╕рдкрд╛рд╕ рдкреВрдЫрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд▓реЗрдирд┐рдпрдо ред рдореИрдВ рдЗрд╕реЗ рд░рдЦрддрд╛ рд╣реВрдВред рдФрд░ Google Chrome рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ChromeDriver рднреА ред рддрдм рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service(r'C:\ChromeDriver\chromedriver.exe')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get('http://www.tristats.ru/')
print(driver.page_source)
driver.quit()

рдпрд╣ рдХреЛрдб рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ url рдкрд░ рдПрдХ рдкреЗрдЬ рдЦреЛрд▓рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА HTML рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рдПрдХ рд░реЛрдбрд╝рд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ 100 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдХреБрд▓ рджреМрдбрд╝ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрднрдЧ 2000 рд╣реИред рдРрд╕рд╛ рдХреИрд╕реЗ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╢реБрд░реВ рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ 100 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдпрджрд┐ рдЖрдк рдкреГрд╖реНрда рдХреЗ рдмрд╣реБрдд рдиреАрдЪреЗ рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдЧрд▓реЗ 100 рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЗрд╕рд▓рд┐рдП, рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рд╣рдо рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХрд╛ рдХреЛрдб рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рд╣рдо рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 10, рдлрд┐рд░ рдкреВрд░рд╛ рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдк рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рдмреАрдЪ рд╣рдо рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдПрдХ рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреЗрдЬ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛред (рднрд▓реЗ рд╣реА рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ - рдПрдХ рдФрд░ рдиреМ рд╕реЗрдХрдВрдб)ред

рдФрд░ рдкреВрд░реНрдг рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

service = Service(r'C:\ChromeDriver\chromedriver.exe')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get('http://www.tristats.ru/')
prev_html = ''
scroll_attempt = 0

while scroll_attempt < 10:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(1)

    if prev_html == driver.page_source:
        scroll_attempt += 1
    else:
        prev_html = driver.page_source
        scroll_attempt = 0 

with open(r'D:\tri\summary.txt', 'w') as f:
    f.write(prev_html)

driver.quit()

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рджреМрдбрд╝ рдХреА рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ html рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, lxml рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред

from lxml import html

рдкрд╣рд▓реЗ рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд╛рддреЗ рд╣реИрдВред рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рдВрдХреЗрдд рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ html рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВред



рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "tr ng-repeat = 'r inDData' рдХреНрд▓рд╛рд╕ = 'рдПрдирдЬреА-рд╕реНрдХреЛрдк' рдпрд╛ " рдХреБрдЫ рдЕрдВрд╢ рдЬреЛ рдЕрдм рдХрд┐рд╕реА рднреА рдЯреИрдЧ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред

with open(r'D:\tri\summary.txt', 'r') as f:
    sum_html = f.read()

tree = html.fromstring(sum_html)
rows = tree.findall(".//*[@ng-repeat='r in racesData']")

рдлрд┐рд░ рд╣рдо рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдЗрд╕ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

import pandas as pd

rs = pd.DataFrame(columns=['date','name','link','males','females','rus','total'], index=range(len(rows))) #rs тАУ races summary

рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрддреНрд╡ рдХрд╣рд╛рдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рд╣реА рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рд╣рдорд╛рд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ html рдХреЛрдб рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ ред

<tr ng-repeat="r in racesData" class="ng-scope">
  <td class="ng-binding">2015-04-26</td>
    <td>
      <img src="/Images/flags/24/USA.png" class="flag">
      <a href="/rus/result/ironman/texas/half/2015" target="_self" class="ng-binding">Ironman Texas 70.3 2015</a>
    </td>
    <td>
      <a href="/rus/result/ironman/texas/half/2015?sex=F" target="_self" class="ng-binding">605</a>
      <i class="fas fa-venus fa-lg" style="color:Pink"></i>
      /
      <a href="/rus/result/ironman/texas/half/2015?sex=M" target="_self" class="ng-binding">1539</a>
      <i class="fas fa-mars fa-lg" style="color:LightBlue"></i>
    </td>
    <td class="ng-binding">
      <img src="/Images/flags/24/rus.png" class="flag">
      <!-- ngIf: r.CountryCount == 0 -->
      <!-- ngIf: r.CountryCount > 0 --><a ng-if="r.CountryCount > 0" href="/rus/result/ironman/texas/half/2015?country=rus" target="_self" class="ng-binding ng-scope">2</a>
      <!-- end ngIf: r.CountryCount > 0 -->
      / 2144
  </td>
</tr>

рдпрд╣рд╛рдВ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрдХреЛрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдирд╣реАрдВ рд╣реИрдВред

for i in range(len(rows)):
    rs.loc[i,'date'] = rows[i].getchildren()[0].text.strip()
    rs.loc[i,'name'] = rows[i].getchildren()[1].getchildren()[1].text.strip()
    rs.loc[i,'link'] = rows[i].getchildren()[1].getchildren()[1].attrib['href'].strip()
    rs.loc[i,'males'] = rows[i].getchildren()[2].getchildren()[2].text.strip()
    rs.loc[i,'females'] = rows[i].getchildren()[2].getchildren()[0].text.strip()
    rs.loc[i,'rus'] = rows[i].getchildren()[3].getchildren()[3].text.strip()
    rs.loc[i,'total'] = rows[i].getchildren()[3].text_content().split('/')[1].strip()

рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ: рдЗрд╕ рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред рдореИрдВ рдЕрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ , рд▓реЗрдХрд┐рди рдпрд╣ csv , рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
dateeventlinkmalesfemalesrustotal
02020-07-02Ironman Dubai Duathlon 70.3 2020/rus/result/ironman/dubai-duathlon/half/2020835215651050
12020-02-07Ironman Dubai 70.3 2020/rus/result/ironman/dubai/half/202063813255770
22020-01-29Israman Half 2020/rus/result/israman/israman/half/20206701264796
32019-12-08Ironman Indian Wells La Quinta 70.3 2019/rus/result/ironman/indian-wells-la-quinta/hal...159059362183
42019-12-07Ironman Taupo 70.3 2019/rus/result/ironman/taupo/half/201976742031187
........................
19171994-07-02ITU European Championship Eichstatt Olympic 1994/rus/result/itu/european-championship-eichstat...610261
19181993-09-04Challenge Almere-Amsterdam Long 1993/rus/result/challenge/almere-amsterdam/full/1993795321827
19191993-07-04ITU European Cup Echternach Olympic 1993/rus/result/itu/european-cup-echternach/olympi...600260
19201992-09-12ITU World Championship Huntsville Olympic 1992/rus/result/itu/world-championship-huntsville/...31703317
19211990-09-15ITU World Championship Orlando Olympic 1990/rus/result/itu/world-championship-orlando/oly...2860528



import pickle as pkl

with open(r'D:\tri\summary.pkl', 'wb') as f:
    pkl.dump(df,f)

рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╕рднреА рдбреЗрдЯрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред рд╣рдо рдмрд╛рдж рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рдЕрдм рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рд▓рд┐рдВрдХ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╣рдо рд╕рднреА рджреМрдбрд╝ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕реНрдХреНрд░реИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕реЗ рдЫрд╡рд┐ рдФрд░ рд╕рдорд╛рдирддрд╛ рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд┐рд╡рдЯ рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рднреА рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП рдЪрдХреНрд░ рдореЗрдВ, рд╣рдо рдкреГрд╖реНрда рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдЦреЛрд▓реЗрдВрдЧреЗ, рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣рдо рджреМрдбрд╝ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ - рдХреБрд▓, рд╣рдо рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕ рдмрд┐рдВрджреБ рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реАрдзреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЛ рд╕реНрдХреНрд░реИрдк рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреБрд▓ рдореВрд▓реНрдп рдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗред рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЕрдЧрд▓реА рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ 60 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рд╣рдореЗрдВ рдХреБрд▓ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ , рдЕрдЧрд▓реА рджреМрдбрд╝ рдкрд░ рдЬрд╛рдПрдВред рдкреЗрдЬ рдХреЛрдб рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдирд╕реНрд▓реЛрдВ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдИрд╡реЗрдВрдЯ рдХреЙрд▓рдо рдореЗрдВ рдорд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджреМрдбрд╝ рдХреЗ рдирд╛рдо рд╕реЗ рдирд╛рдо рджреЗрдВ ред рдирд╛рдореЛрдВ рдХреЗ рдЯрдХрд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рднреА рджреМрдбрд╝ рдореЗрдВ рдзреБрд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдо рд╣реЛрдВред рдЗрд╕реЗ рджреЗрдЦреЛ:

df[df.duplicated(subset = 'event', keep=False)]

dateeventlinkmalesfemalesrustotal
4502018-07-15A1 Sprint 2018/rus/result/a1/cc/sprint/2018-07-1543154758
4832018-06-23A1 Sprint 2018/rus/result/a1/cc/sprint/2018-06-2361157676
6702017-07-303Grom Olympic 2017/rus/result/3grom//olympic/2017-07-3024944293293
7522017-06-113Grom Olympic 2017/rus/result/3grom//olympic/2017-06-1125128279279
рдЦреИрд░, рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрд┐рдерд┐рдпрд╛рдВ, рдФрд░ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ ( рдкреБрд░реБрд╖реЛрдВ, рдорд╣рд┐рд▓рд╛рдУрдВ, рд░рд╕, рдХреБрд▓ ), рдФрд░ рд▓рд┐рдВрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред рдЖрдкрдХреЛ рдЗрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рд╕рднреА рдирд╛рдо рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрдВ, рд╣рдо рдПрдХ рдмрдбрд╝рд╛ рдЦрдирди рдЪрдХреНрд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ:



dateeventlinkmalesfemalesrustotal
4502018-07-15A1 Sprint 7 2018/rus/result/a1/cc/sprint/2018-07-1543154758
4832018-06-23A1 Sprint 6 2018/rus/result/a1/cc/sprint/2018-06-2361157676
6702017-07-303Grom Olympic 7 2017/rus/result/3grom//olympic/2017-07-3024944293293
7522017-06-113Grom Olympic 6 2017/rus/result/3grom//olympic/2017-06-112512827927


service.start()
driver = webdriver.Remote(service.service_url)
timeout = 60

for index, row in df.iterrows():
    try:
        driver.get('http://www.tristats.ru' + row['link'])     
        start = time.time()

        while True:
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(1)
            race_html = driver.page_source
            tree = html.fromstring(race_html)
            race_rows = tree.findall(".//*[@ng-repeat='r in resultsData']")

            if len(race_rows) == int(row['total']):
                break
            if time.time() - start > timeout:
                print('timeout')
                break

        with open(os.path.join(r'D:\tri\races', row['event'] +  '.txt'), 'w') as f:
            f.write(race_html)

    except:
        traceback.print_exc()

    time.sleep(1)
    
driver.quit()

рдпрд╣ рдПрдХ рд▓рдВрдмреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рд╕рдм рдХреБрдЫ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рднрд╛рд░реА рддрдВрддреНрд░ рдШреВрдордирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕реБрдЦрдж рдЙрддреНрд╕рд╛рд╣ рдХреА рднрд╛рд╡рдирд╛ рдЖрддреА рд╣реИред рдХреЗрд╡рд▓ рддреАрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреНрд░рддрд┐ рдорд┐рдирдЯ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗред рд░рд╛рдд рдХреЗ рд▓рд┐рдП рд╕реНрдкрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ 10 рдШрдВрдЯреЗ рд▓рдЧреЗред рд╕реБрдмрд╣ рддрдХ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЧрдП рдереЗред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ, рдХреБрдЫ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рджреВрд╕рд░реЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ред



рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1,922 рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рдХреБрд▓ рдХреНрд╖рдорддрд╛ рд▓рдЧрднрдЧ 3 рдЬреАрдмреА рд╣реИред рдардВрдбрд╛! рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ 300 рджреМрдбрд╝ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдПрдХ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдмрд╛рдд рдХреНрдпрд╛ рд╣реИ? рдЪреБрдирд┐рдВрджрд╛ рддрд░реАрдХреЗ рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреБрд░реА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдХреБрд▓ рдореВрд▓реНрдп рдФрд░ рджреМрдбрд╝ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рд╣рдордиреЗ рдЬрд╛рдБрдЪ рдХреА рд╣реИ, рд╡рд╣ рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рджреБрдЦрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИред рдпрд╛ рддреЛ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣рд░ рдХреЛрдИ рдЦрддреНрдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмрдЧ рдирд╣реАрдВ рд╣реЛрдЧреАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдбреЗрдЯрд╛ рдЕрдкреВрд░реНрдгрддрд╛ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрдХреЗрддред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 100 рдпрд╛ 0 рд╣реИ, рдпреЗ рд╕рдмрд╕реЗ рд╕рдВрджрд┐рдЧреНрдз рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдЖрда рдереЗред рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдирдЬрд╝рджреАрдХреА рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рд╡реИрд╕реЗ, рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 100 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд╣реИрдВред

рдЦреИрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рд╣реИред рд╣рдо рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рджреЛрдмрд╛рд░рд╛, рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рджреМрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓реЗрдВрдЧреЗ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝реЗрдВрдЧреЗ рдФрд░ рдкрдВрдбреЛрдВ рдХреЗ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ ред рд╣рдо рдЗрди рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдореЛрдВ рдХреЛ рдПрдХ рддрд╛рдирд╛рд╢рд╛рд╣ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ , рдЬрд┐рд╕рдореЗрдВ рджреМрдбрд╝ рдХреЗ рдирд╛рдо рдХреА рдХреБрдВрдЬреА рд╣реЛрдЧреА - рдпрд╛рдиреА, рдкрд┐рд╡рдЯ рдЯреЗрдмрд▓ рд╕реЗ рдШрдЯрдирд╛ рдХреЗ рдорд╛рди рдпрд╛ рджреМрдбрд╝ рдкреГрд╖реНрдареЛрдВ рдХреЗ HTML рдХреЛрдб рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдо , рд╡реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

rd = {} #rd тАУ race details

for e in rs['event']:
    place = []
    ... sex = [], name=..., country, group, place_in_group, swim, t1, bike, t2, run
    result = []

    with open(os.path.join(r'D:\tri\races', e + '.txt'), 'r')
        race_html = f.read()

    tree = html.fromstring(race_html)
    rows = tree.findall(".//*[@ng-repeat='r in resultsData']")

    for j in range(len(rows)):
        row = rows[j]
        parts = row.text_content().split('\n')
        parts = [r.strip() for r in parts if r.strip() != '']
        place.append(parts[0])

        if len([a for a in row.findall('.//i')]) > 0:
            sex.append([a for a in row.findall('.//i')][0].attrib['ng-if'][10:-1])
        else:
            sex.append('')

        name.append(parts[1])

        if len(parts) > 10:
            country.append(parts[2].strip())         
            k=0
        else:
            country.append('')
            k=1

        group.append(parts[3-k])
        ... place_in_group.append(...), swim.append ..., t1, bike, t2, run
        result.append(parts[10-k])

    race = pd.DataFrame()
    race['place'] = place
    ... race['sex'] = sex, race['name'] = ..., 'country', 'group', 'place_in_group', 'swim', ' t1', 'bike', 't2', 'run'
    race['result'] = result

    rd[e] = race

with open(r'D:\tri\details.pkl', 'wb') as f:
    pkl.dump(rd,f)

placesexnamecountrygroupplace in groupswimt1biket2runresult
01MReed, TimAUSMPRO124:341:072:13:461:491:23:174:04:33
12MVan Berkel, TimAUSMPRO224:341:052:13:471:531:27:174:08:36
23MBaldwin, NicholasSEYMPRO326:310:592:14:061:541:25:364:09:06
34MPolizzi, AlexanderAUSMPRO423:211:122:14:531:541:31:164:12:36
45MChang, Chia-HaoTWNM18-24125:181:342:23:382:131:29:014:21:44
56MRondy, GuillaumeFRAM35-39127:511:262:21:532:291:35:194:28:58
67FSteffen, CarolineSUIFPRO126:521:012:24:542:101:34:174:29:14
78MBetten, SamAUSMPRO523:301:262:18:241:571:45:074:30:24
89MGallot, SimonFRAM30-34127:501:332:20:152:131:45:224:37:13
.......................................
524525MSantos, AlfredoPHIM65-69250:424:233:52:1010:323:36:118:33:58
525526FEscober, EulaPHIF18-24547:073:504:43:443:412:59:458:38:07
526527MBelen, Virgilio Jr.PHIM45-497647:055:493:48:1811:213:46:068:38:39
527528MKunimoto, KilhakGUMM70-74240:322:503:53:376:454:01:368:45:20
528529MSumicad, SiegfredPHIM50-545459:104:384:11:556:353:23:458:46:03
529530MGomez, PaulPHIM45-497750:026:294:07:587:243:41:418:53:34
530531MRamos, John RaymundPHIM25-292643:443:044:21:135:563:45:108:59:07
531532FDe Guzman, Clouie AnnePHIF30-34952:293:164:03:027:013:56:399:02:27
532533FSamson, Maria DoloresPHIF45-491748:564:214:16:346:263:47:069:03:23
533534MSalazar, RichardPHIM40-4410742:194:024:30:366:393:39:519:03:27
рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рджреМрдбрд╝ рдХреА HTML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рддрд╛рд░реАрдЦ, рдирд╛рдо рдФрд░ рд╕реНрдерд╛рди рднреА рд╣реЛрддрд╛ рд╣реИред рджрд┐рдирд╛рдВрдХ рдФрд░ рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдзреБрд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИред рд╣рдо HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрд┐рд╡рдЯ рдЯреЗрдмрд▓ рдореЗрдВ рдПрдХ рдирдП рдХреЙрд▓рдо рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

for index, row in rs.iterrows():
    e = row['event']       
    with open(os.path.join(r'D:\tri\races', e + '.txt'), 'r') as f:
        race_html = f.read()

    tree = html.fromstring(race_html)
    header_elem = [tb for tb in tree.findall('.//tbody') if tb.getchildren()[0].getchildren()[0].text == ''][0]
    location = header_elem.getchildren()[1].getchildren()[1].text.strip()
    rs.loc[index, 'loc'] = location

eventdatelocmalefemalerustotallink
0Ironman Dubai Duathlon 70.3 20202020-07-02Dubai, United Arab Emirates835215651050...
1Ironman Dubai 70.3 20202020-02-07Dubai, United Arab Emirates63813255770...
2Israman Half 20202020-01-29Israel, Eilat6701264796...
3Ironman Indian Wells La Quinta 70.3 20192019-12-08Indian Wells/La Quinta, California, USA159059362183...
4Ironman Taupo 70.3 20192019-12-07New Zealand76742031187...
5Ironman Bahrain 70.3 20192019-12-07Manama, Bahrain858214381072...
6Ironman Western Australia 20192019-12-01Busselton, Western Australia94022911169...
7Ironman Mar del Plata 20192019-12-01Mar del Plata, Argentina506663572...
8Ironman Cozumel 20192019-11-24Cozumel, Mexico1158395121553...
9Ironman Arizona 20192019-11-24Tempe, Arizona, USA169763332330...
10Ironman Xiamen 70.3 20192019-11-10Xiamen, China897170141067...
рд╕рд╣реЗрдЬреЗрдВред рдПрдХ рдирдИ рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдПред

with open(r'D:\tri\summary1.pkl', 'wb') as f:
    pkl.dump(df,f)

рднрд╛рдЧ 2. рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдФрд░ рд╕реНрд╡рд░реВрдкрдг


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╕рднреА рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ str ред рдпрд╣ рджрд┐рдирд╛рдВрдХ, рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ, рдФрд░ рд╕реНрдерд╛рди рдФрд░ рдЕрдиреНрдп рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЪрд▓реЛ рдзреБрд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
eventdatelocmalefemalerustotallink
0Ironman Dubai Duathlon 70.3 20202020-07-02Dubai, United Arab Emirates835215651050...
1Ironman Dubai 70.3 20202020-02-07Dubai, United Arab Emirates63813255770...
2Israman Half 20202020-01-29Israel, Eilat6701264796...
3Ironman Indian Wells La Quinta 70.3 20192019-12-08Indian Wells/La Quinta, California, USA159059362183...
4Ironman Taupo 70.3 20192019-12-07New Zealand76742031187...
5Ironman Bahrain 70.3 20192019-12-07Manama, Bahrain858214381072...
6Ironman Western Australia 20192019-12-01Busselton, Western Australia94022911169...
7Ironman Mar del Plata 20192019-12-01Mar del Plata, Argentina506663572...
8Ironman Cozumel 20192019-11-24Cozumel, Mexico1158395121553...
9Ironman Arizona 20192019-11-24Tempe, Arizona, USA169763332330...
10Ironman Xiamen 70.3 20192019-11-10Xiamen, China897170141067...
...........................

рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп


рдИрд╡реЗрдВрдЯ , рд▓реЛрдХреЗрд╢рди рдФрд░ рд▓рд┐рдВрдХ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджрд┐рдирд╛рдВрдХ рдкрдВрдбреЛрдВ рдХреЗ рдбреЗрдЯрд╛рдЗрдо рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд :

rs['date'] = pd.to_datetime(rs['date'])

рдмрд╛рдХреА рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ:

cols = ['males', 'females', 'rus', 'total']
rs[cols] = rs[cols].astype(int)

рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛ рдЧрдпрд╛, рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИред рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ - рд╕рд╣реЗрдЬреЗрдВ:

with open(r'D:\tri\summary2.pkl', 'wb') as f:
    pkl.dump(rs, f)

рдЕрдм рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХреА рд░реЗрд╕рд┐рдВрдЧред рдЪреВрдБрдХрд┐ рд╕рднреА рджреМрдбрд╝ рдПрдХ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреЗрдЬрд╝ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдирд╣реАрдВ, рд╣рдо рдХреЙрдирдХреИрдЯ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрдбрд╝реЗ рдЕрд░ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо ( рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ ) рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗ ред

ar = pd.concat(rd) 

ar рдореЗрдВ 1,416,365 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВред

рдЕрдм рд╕рдореВрд╣ рдореЗрдВ рдЬрдЧрд╣ рдФрд░ рдЬрдЧрд╣ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдореЗрдВ рдмрджрд▓реЗрдВред

ar[['place', 'place in group']] = ar[['place', 'place in group']].astype(int))

рдЕрдЧрд▓рд╛, рд╣рдо рдЕрд╕реНрдерд╛рдпреА рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкрд╛рдВрдбрд╛ рд╕реЗ рдЯреЗрдбрд┐рдореЗрд▓реНрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓реЗрдВрдЧреЗ ред рд▓реЗрдХрд┐рди рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдареАрдХ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдореВрд▓реНрдп рдЬреЛ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдХрдо рд╣реИрдВ, рдмрд╣реБрдд рдЯрд┐рдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЪрд▓рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
placesexnamecountrygroupplace in groupswimt1biket2runresult
01MDejan PatrcevicCROM40-44129:032:502:09:171:371:22:064:04:51
12MLukas KrpecCZEM35-39129:002:402:07:011:481:25:484:06:15
23MMarin KoceicCROM40-44227:342:092:12:131:301:27:194:10:44


for col in ['swim', 't1', 'bike', 't2', 'run', 'result']:
    strlen = ar[col].str.len()
    ar.loc[strlen==5, col] = '0:' + ar.loc[strlen==5, col]
    ar.loc[strlen==4, col] = '0:0' + ar.loc[strlen==4, col]

рдЕрдм рднреА, рдЕрднреА рднреА рд╢реЗрд╖ рддрд╛рд░, рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦреЗрдВ : Timedelta рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ :
placesexnamecountrygroupplace in groupswimt1biket2runresult
01MDejan PatrcevicCROM40-4410:29:030:02:502:09:170:01:371:22:064:04:51
12MLukas KrpecCZEM35-3910:29:000:02:402:07:010:01:481:25:484:06:15
23MMarin KoceicCROM40-4420:27:340:02:092:12:130:01:301:27:194:10:44


for col in ['swim', 't1', 'bike', 't2', 'run', 'result']:
    ar[col] = pd.to_timedelta(ar[col])

рдордВрдЬрд╝рд┐рд▓


рдЖрдЧреЗ рдмрдврд╝реЛред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕реЗрдХреНрд╕ рдХреЙрд▓рдо рдореЗрдВ рдХреЗрд╡рд▓ рдПрдо рдФрд░ рдПрдл рдХреЗ рдореВрд▓реНрдп рд╣реИрдВ :

ar['sex'].unique() 

Out: ['M', 'F', '']

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрднреА рднреА рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд▓рд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдРрд╕реЗ рдХрд┐рддрдиреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ:

len(ar[ar['sex'] == '']) 

Out: 2538

рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдФрд░ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдмреАрдЪ, рд╕реЗрдХреНрд╕ рдХреЙрд▓рдо рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдФрд░ рдЬреЛрдЦрд┐рдо рднрд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдУрд░ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗред рдЖрджреЗрд╢ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░рдВрддрд░рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдпреБрдХреНрдд рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдмрджрд▓рдиреЗ ar рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╡рд╛рдкрд╕ rd :

for event in ar.index.get_level_values(0).unique():
    rd[event] = ar.loc[event]

with open(r'D:\tri\details1.pkl', 'wb') as f:
    pkl.dump(rd,f)

рд╡реИрд╕реЗ, рдХреБрдЫ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдХрд╛рд░рдг, рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ 367 рдХреЗрдмреА рд╕реЗ рдШрдЯрдХрд░ рдкреЙрдЯ рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП 295 рдХреЗрдмреА рдФрд░ рд░реЗрд╕рд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП 251 рдПрдордмреА рд╕реЗ 168 рдПрдордмреА рд╣реЛ рдЧрдпрд╛ рд╣реИред

рджреЗрд╢ рдХреЛрдб


рдЕрдм рджреЗрд╢ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред

ar['country'].unique()

Out: ['CRO', 'CZE', 'SLO', 'SRB', 'BUL', 'SVK', 'SWE', 'BIH', 'POL', 'MK', 'ROU', 'GRE', 'FRA', 'HUN', 'NOR', 'AUT', 'MNE', 'GBR', 'RUS', 'UAE', 'USA', 'GER', 'URU', 'CRC', 'ITA', 'DEN', 'TUR', 'SUI', 'MEX', 'BLR', 'EST', 'NED', 'AUS', 'BGI', 'BEL', 'ESP', 'POR', 'UKR', 'CAN', 'IRL', 'JPN', 'HKG', 'JEY', 'SGP', 'BRA', 'QAT', 'LUX', 'RSA', 'NZL', 'LAT', 'PHI', 'KSA', 'SEY', 'MAS', 'OMA', 'ARG', 'ECU', 'THA', 'JOR', 'BRN', 'CIV', 'FIN', 'IRN', 'BER', 'LBA', 'KUW', 'LTU', 'SRI', 'HON', 'INA', 'LBN', 'PAN', 'EGY', 'MLT', 'WAL', 'ISL', 'CYP', 'DOM', 'IND', 'VIE', 'MRI', 'AZE', 'MLD', 'LIE', 'VEN', 'ALG', 'SYR', 'MAR', 'KZK', 'PER', 'COL', 'IRQ', 'PAK', 'CZK', 'KAZ', 'CHN', 'NEP', 'ISR', 'MKD', 'FRO', 'BAN', 'ARU', 'CPV', 'ALB', 'BIZ', 'TPE', 'KGZ', 'BNN', 'CUB', 'SNG', 'VTN', 'THI', 'PRG', 'KOR', 'RE', 'TW', 'VN', 'MOL', 'FRE', 'AND', 'MDV', 'GUA', 'MON', 'ARM', 'F.I.TRI.', 'BAHREIN', 'SUECIA', 'REPUBLICA CHECA', 'BRASIL', 'CHI', 'MDA', 'TUN', 'NDL', 'Danish(Dane)', 'Welsh', 'Austrian', 'Unknown', 'AFG', 'Argentinean', 'Pitcairn', 'South African', 'Greenland', 'ESTADOS UNIDOS', 'LUXEMBURGO', 'SUDAFRICA', 'NUEVA ZELANDA', 'RUMANIA', 'PM', 'BAH', 'LTV', 'ESA', 'LAB', 'GIB', 'GUT', 'SAR', 'ita', 'aut', 'ger', 'esp', 'gbr', 'hun', 'den', 'usa', 'sui', 'slo', 'cze', 'svk', 'fra', 'fin', 'isr', 'irn', 'irl', 'bel', 'ned', 'sco', 'pol', 'SMR', 'mex', 'STEEL T BG', 'KINO MANA', 'IVB', 'TCH', 'SCO', 'KEN', 'BAS', 'ZIM', 'Joe', 'PUR', 'SWZ', 'Mark', 'WLS', 'MYA', 'BOT', 'REU', 'NAM', 'NCL', 'BOL', 'GGY', 'ISV', 'TWN', 'GUM', 'FIJ', 'COK', 'NGR', 'IRI', 'GAB', 'ANT', 'GEO', 'COG', 'sue', 'SUD', 'BAR', 'CAY', 'BO', 'VE', 'AX', 'MD', 'PAR', 'UM', 'SEN', 'NIG', 'RWA', 'YEM', 'PLE', 'GHA', 'ITU', 'UZB', 'MGL', 'MAC', 'DMA', 'TAH', 'TTO', 'AHO', 'JAM', 'SKN', 'GRN', 'PRK', 'NFK', 'SOL', 'Sandy', 'SAM', 'PNG', 'SGS', 'Suchy, Jorg', 'SOG', 'GEQ', 'BVT', 'DJI', 'CHA', 'ANG', 'YUG', 'IOT', 'HAI', 'SJM', 'CUW', 'BHU', 'ERI', 'FLK', 'HMD', 'GUF', 'ESH', 'sandy', 'UMI', 'selsmark, 'Alise', 'Eddie', '31/3, Colin', 'CC', '', '', '', '', '', ' ', '', '', '', '-', '', 'GRL', 'UGA', 'VAT', 'ETH', 'ASA', 'PYF', 'ATA', 'ALA', 'MTQ', 'ZZ', 'CXR', 'AIA', 'TJK', 'GUY', 'KR', 'PF', 'BN', 'MO', 'LA', 'CAM', 'NCA', 'ZAM', 'MAD', 'TOG', 'VIR', 'ATF', 'VAN', 'SLE', 'GLP', 'SCG', 'LAO', 'IMN', 'BUR', 'IR', 'SY', 'CMR', 'GBS', 'SUR', 'MOZ', 'BLM', 'MSR', 'CAF', 'BEN', 'COD', 'CCK', 'TUV', 'TGA', 'GI', 'XKX', 'NRU', 'NC', 'LBR', 'TAN', 'VIN', 'SSD', 'GP', 'PS', 'IM', 'JE', '', 'MLI', 'FSM', 'LCA', 'GMB', 'MHL', 'NH', 'FL', 'CT', 'UT', 'AQ', 'Korea', 'Taiwan', 'NewCaledonia', 'Czech Republic', 'PLW', 'BRU', 'RUN', 'NIU', 'KIR', 'SOM', 'TKM', 'SPM', 'BDI', 'COM', 'TCA', 'SHN', 'DO2', 'DCF', 'PCN', 'MNP', 'MYT', 'SXM', 'MAF', 'GUI', 'AN', 'Slovak republic', 'Channel Islands', 'Reunion', 'Wales', 'Scotland', 'ica', 'WLF', 'D', 'F', 'I', 'B', 'L', 'E', 'A', 'S', 'N', 'H', 'R', 'NU', 'BES', 'Bavaria', 'TLS', 'J', 'TKL', 'Tirol"', 'P', '?????', 'EU', 'ES-IB', 'ES-CT', '', 'SOO', 'LZE', '', '', '', '', '', '']

412 рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдпред

рдореВрд▓ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рджреЗрд╢ рдХреЛ рдКрдкрд░реА рдорд╛рдорд▓реЗ рдореЗрдВ рддреАрди рдЕрдВрдХреЛрдВ рдХреЗ рдЕрдХреНрд╖рд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рдорд╛рдирдХ рдЖрдИрдПрд╕рдУ 3166 рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЬреЛ рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕реА рддреАрди-рдЕрдВрдХреАрдп рдФрд░ рджреЛ-рдЕрдВрдХреАрдп рдХреЛрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВред рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░, рдЗрд╕ рдорд╛рдирдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ pycountry рдкреИрдХреЗрдЬ ред рдпрд╣рд╛рдВ рджреЗрдЦрд┐рдП рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

import pycountry as pyco

pyco.countries.get(alpha_3 = 'RUS')

Out: Country(alpha_2='RU', alpha_3='RUS', name='Russian Federation', numeric='643')

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕рднреА рддреАрди рдЕрдВрдХреЛрдВ рдХреЗ рдХреЛрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдКрдкрд░реА рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рд╣реЛрдВрдЧреЗ, рдЬреЛ рджреЗрд╢реЛрдВ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╣реИрдВред (...) рдФрд░ historical_countries.get (...) :

valid_a3 = [c for c in ar['country'].unique() if pyco.countries.get(alpha_3 = c.upper()) != None or pyco.historic_countries.get(alpha_3 = c.upper()) != None])

рдЙрдирдореЗрдВ рд╕реЗ рез реп рекрезреи рдереЗред рдпрд╛рдиреА рдЖрдзреЗ рд╕реЗ рднреА рдХрдоред
рд╢реЗрд╖ 222 рдХреЗ рд▓рд┐рдП (рд╣рдо рдЙрдирдХреА рд╕реВрдЪреА рдХреЛ tofix рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ ), рд╣рдо рдПрдХ рдлрд┐рдХреНрд╕ рдорд┐рд▓рд╛рди рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдПрдВрдЧреЗ , рдЬрд┐рд╕рдореЗрдВ рдХреБрдВрдЬреА рдХрд╛ рдореВрд▓ рдирд╛рдо рд╣реЛрдЧрд╛, рдФрд░ рдЖрдИрдПрд╕рдУ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореВрд▓реНрдп рддреАрди рдЕрдВрдХреЛрдВ рдХрд╛ рдХреЛрдб рд╣реЛрдЧрд╛ред

tofix = list(set(ar['country'].unique()) - set(valid_a3))

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рджреЛ рдЕрдВрдХреЛрдВ рдХреЗ рдХреЛрдбреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ pycountry.countries.get (alp_2 = ...) рдХреЗ рд╕рд╛рде , рдКрдкрд░реА рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА:

for icc in tofix: #icc -invalid country code
    if pyco.countries.get(alpha_2 = icc.upper()) != None:
        fix[icc] = pyco.countries.get(alpha_2 = icc.upper()).alpha_3
    else:
        if pyco.historic_countries.get(alpha_2 = icc.upper()) != None:
            fix[icc] = pyco.historic_countries.get(alpha_2 = icc.upper()).alpha_3

рдлрд┐рд░ pycountry.countries.get (рдирд╛рдо = ...) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░рд╛ рдирд╛рдо , pycountry.countries.get (common_name = ...) , рдЙрдиреНрд╣реЗрдВ str.title () рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ :

for icc in tofix:
    if pyco.countries.get(common_name = icc.title()) != None:
        fix[icc] = pyco.countries.get(common_name = icc.title()).alpha_3
    else:
        if pyco.countries.get(name = icc.title()) != None:
            fix[icc] = pyco.countries.get(name = icc.title()).alpha_3
        else:
            if pyco.historic_countries.get(name = icc.title()) != None:
                fix[icc] = pyco.historic_countries.get(name = icc.title()).alpha_3

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЕрдкрд░рд┐рдЪрд┐рдд рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ 190 рддрдХ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА рдХрд╛рдлреА: рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдЕрднреА рднреА рдХрдИ рддреАрди-рдЕрдВрдХреАрдп рдХреЛрдб рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ ISO рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рдХреНрдпрд╛? рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рдорд╛рдирдХ рд╣реИ - рдУрд▓рдВрдкрд┐рдХ ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛рдЗрдХрд╛рдЙрдВрдЯреНрд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╕рдорд╛рдзрд╛рди datahub.io рдкрд░ рдПрдХ рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдирд╛рдо рдореЗрдВ рд░рдЦреЗрдВ рдЬрд┐рд╕реЗ cdf рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЖрдИрдУрд╕реА - рд╕рдВрдзрд┐рдЧрдд рдУрд▓рдВрдкрд┐рдХ рд╕рдорд┐рддрд┐ (IOC)
['URU', '', 'PAR', 'SUECIA', 'KUW', 'South African', '', 'Austrian', 'ISV', 'H', 'SCO', 'ES-CT', ', 'GUI', 'BOT', 'SEY', 'BIZ', 'LAB', 'PUR', ' ', 'Scotland', '', '', 'TCH', 'TGA', 'UT', 'BAH', 'GEQ', 'NEP', 'TAH', 'ica', 'FRE', 'E', 'TOG', 'MYA', '', 'Danish (Dane)', 'SAM', 'TPE', 'MON', 'ger', 'Unknown', 'sui', 'R', 'SUI', 'A', 'GRN', 'KZK', 'Wales', '', 'GBS', 'ESA', 'Bavaria', 'Czech Republic', '31/3, Colin', 'SOL', 'SKN', '', 'MGL', 'XKX', 'WLS', 'MOL', 'FIJ', 'CAY', 'ES-IB', 'BER', 'PLE', 'MRI', 'B', 'KSA', '', '', 'LAT', 'GRE', 'ARU', '', 'THI', 'NGR', 'MAD', 'SOG', 'MLD', '?????', 'AHO', 'sco', 'UAE', 'RUMANIA', 'CRO', 'RSA', 'NUEVA ZELANDA', 'KINO MANA', 'PHI', 'sue', 'Tirol"', 'IRI', 'POR', 'CZK', 'SAR', 'D', 'BRASIL', 'DCF', 'HAI', 'ned', 'N', 'BAHREIN', 'VTN', 'EU', 'CAM', 'Mark', 'BUL', 'Welsh', 'VIN', 'HON', 'ESTADOS UNIDOS', 'I', 'GUA', 'OMA', 'CRC', 'PRG', 'NIG', 'BHU', 'Joe', 'GER', 'RUN', 'ALG', '', 'Channel Islands', 'Reunion', 'REPUBLICA CHECA', 'slo', 'ANG', 'NewCaledonia', 'GUT', 'VIE', 'ASA', 'BAR', 'SRI', 'L', '', 'J', 'BAS', 'LUXEMBURGO', 'S', 'CHI', 'SNG', 'BNN', 'den', 'F.I.TRI.', 'STEEL T BG', 'NCA', 'Slovak republic', 'MAS', 'LZE', '-', 'F', 'BRU', '', 'LBA', 'NDL', 'DEN', 'IVB', 'BAN', 'Sandy', 'ZAM', 'sandy', 'Korea', 'SOO', 'BGI', '', 'LTV', 'selsmark, Alise', 'TAN', 'NED', '', 'Suchy, Jorg', 'SLO', 'SUDAFRICA', 'ZIM', 'Eddie', 'INA', '', 'SUD', 'VAN', 'FL', 'P', 'ITU', 'ZZ', 'Argentinean', 'CHA', 'DO2', 'WAL']


official nameshort nameiso2iso3ioc
0NaNTaiwanTWTWNTPE
1AfghanistanAfghanistanAFAFGAFG
2AlbaniaAlbaniaALALBALB
3AlgeriaAlgeriaDZDZAALG
4American SamoaAmerican SamoaASASMASA
5AndorraAndorraADANDAND
6AngolaAngolaAOAGOANG
7AnguillaAnguillaAIAIAAIA
8AntarcticaAntarcticaAQATANaN
9Antigua and BarbudaAntigua & BarbudaAGATGANT
10ArgentinaArgentinaARARGARG


len(([x for x in tofix if x.upper() in list(cdf['ioc'])]))

Out: 82

Tofix рд╕реЗ рддреАрди рдЕрдВрдХреЛрдВ рдХреЗ рдХреЛрдб рдХреЗ рдмреАрдЪ, 82 рдЗрд╕реА IOC рдкрд╛рдП рдЧрдП ред рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдорд┐рд▓рд╛рди рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

for icc in tofix:
    if icc.upper() in list(cdf['ioc']):
        ind = cdf[cdf['ioc'] == icc.upper()].index[0]
        fix[icc] = cdf.loc[ind, 'iso3']

108 рдХрдЪреНрдЪреЗ рдорд╛рди рдмрдЪреЗред рд╡реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рдорджрдж рдХреЗ рд▓рд┐рдП Google рдХреА рдУрд░ рд░реБрдЦ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореИрдиреБрдЕрд▓ рдирд┐рдпрдВрддреНрд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред 49 рдорд╛рди рдмрдиреЗ рд╣реБрдП рд╣реИрдВ рдЬрд┐рдирдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд╕рдВрднрд╡ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореВрд▓реНрдп рд╕рдВрднрд╡рддрдГ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред
{'BGI': 'BRB', 'WAL': 'GBR', 'MLD': 'MDA', 'KZK': 'KAZ', 'CZK': 'CZE', 'BNN': 'BEN', 'SNG': 'SGP', 'VTN': 'VNM', 'THI': 'THA', 'PRG': 'PRT', 'MOL': 'MDA', 'FRE': 'FRA', 'F.I.TRI.': 'ITA', 'BAHREIN': 'BHR', 'SUECIA': 'SWE', 'REPUBLICA CHECA': 'CZE', 'BRASIL': 'BRA', 'NDL': 'NLD', 'Danish (Dane)': 'DNK', 'Welsh': 'GBR', 'Austrian': 'AUT', 'Argentinean': 'ARG', 'South African': 'ZAF', 'ESTADOS UNIDOS': 'USA', 'LUXEMBURGO': 'LUX', 'SUDAFRICA': 'ZAF', 'NUEVA ZELANDA': 'NZL', 'RUMANIA': 'ROU', 'sco': 'GBR', 'SCO': 'GBR', 'WLS': 'GBR', '': 'IND', '': 'IRL', '': 'ARM', '': 'BGR', '': 'SRB', ' ': 'BLR', '': 'GBR', '': 'FRA', '': 'HND', '-': 'CRI', '': 'AZE', 'Korea': 'KOR', 'NewCaledonia': 'FRA', 'Czech Republic': 'CZE', 'Slovak republic': 'SVK', 'Channel Islands': 'FRA', 'Reunion': 'FRA', 'Wales': 'GBR', 'Scotland': 'GBR', 'Bavaria': 'DEU', 'Tirol"': 'AUT', '': 'KGZ', '': 'BLR', '': 'BLR', '': 'BLR', '': 'RUS', '': 'BLR', '': 'RUS'}



unfixed = [x for x in tofix if x not in fix.keys()]

Out: ['', 'H', 'ES-CT', 'LAB', 'TCH', 'UT', 'TAH', 'ica', 'E', 'Unknown', 'R', 'A', '31/3, Colin', 'XKX', 'ES-IB','B','SOG','?????','KINO MANA','sue','SAR','D', 'DCF', 'N', 'EU', 'Mark', 'I', 'Joe', 'RUN', 'GUT', 'L', 'J', 'BAS', 'S', 'STEEL T BG', 'LZE', 'F', 'Sandy', 'DO2', 'sandy', 'SOO', 'LTV', 'selsmark, Alise', 'Suchy, Jorg' 'Eddie', 'FL', 'P', 'ITU', 'ZZ']

рдЗрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдорд┐рд▓рд╛рди рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдЧреАред

for cc in unfixed:
    fix[cc] = ''

рдЕрдВрдд рдореЗрдВ, рд╣рдо рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЛрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдиреНрдп рд╣реИрдВ рд▓реЗрдХрд┐рди рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред

for cc in valid_a3:
    if cc.upper() != cc:
        fix[cc] = cc.upper()

рдЕрдм рдкрд╛рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЖрдЧреЗ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЗрд╢ рдХреЙрд▓рдо рдХреЛ рджреЗрд╢ рдХреЗ рдХрдЪреНрдЪреЗ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ ред рдлрд┐рд░, рдмрдирд╛рдП рдЧрдП рдорд┐рд▓рд╛рди рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рджреЗрд╢ рдХреЙрд▓рдо рдореЗрдВ рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдИрдПрд╕рдУ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВред

for cc in fix:
    ind = ar[ar['country'] == cc].index
    ar.loc[ind,'country'] = fix[cc]

рдпрд╣рд╛рдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреЛрдИ рднреА рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рдЧрднрдЧ рдбреЗрдврд╝ рдорд┐рд▓рд┐рдпрди рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рдо рдПрдХ рдЪрдХреНрд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдФрд░ рдХреИрд╕реЗ? рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХрд┐рддрдиреЗ рд░рд┐рдХреЙрд░реНрдб рдмрджрд▓реЗ рдЧрдП рд╣реИрдВ:

len(ar[ar['country'] != ar['country raw']])

Out: 315955

рдпрд╛рдиреА рдХреБрд▓ рдХрд╛ 20% рд╕реЗ рдЕрдзрд┐рдХред

ar[ar['country'] != ar['country raw']].sample(10)

placesexnamecountrygroupplace in group...country raw
285286MAlbaek, Mads OrlaDNKM30-3463...DEN
12881289MBenthien, AndreasDEUM40-44198...GER
490491MLontok, JoselitoPHLM50-5418...PHI
145146MMathiasen, KeldDNKM45-4916...DEN
445446MPalm, FrancoisZAFM25-2948...RSA
152153MMuller, JohannesDEUM35-3919...GER
764765FWoscher SylviaDEUF55-598...GER
21822183MKojellis, HolgerDEUM40-44258...GER
12931294MZweer, WaldemarDEUM25-29117...GER
747748MPetersen, MathiasDNKM25-2979...DE

len(ar[ar['country'] == ''])

Out: 3221

рдпрд╣ рдПрдХ рджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдпрд╛ рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рджреЗрд╢ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЕрджреНрд╡рд┐рддреАрдп рджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 412 рд╕реЗ рдШрдЯрдХрд░ 250 рд╣реЛ рдЧрдИред рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ: рдЕрдм рдХреЛрдИ рд╡рд┐рдЪрд▓рди рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдирдП рд╡рд┐рд╡рд░рдг 2.pkl рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ , рд╕рдВрдпреБрдХреНрдд рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдХреЛ рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
['', 'ABW', 'AFG', 'AGO', 'AIA', 'ALA', 'ALB', 'AND', 'ANT', 'ARE', 'ARG', 'ARM', 'ASM', 'ATA', 'ATF', 'AUS', 'AUT', 'AZE', 'BDI', 'BEL', 'BEN', 'BES', 'BGD', 'BGR', 'BHR', 'BHS', 'BIH', 'BLM', 'BLR', 'BLZ', 'BMU', 'BOL', 'BRA', 'BRB', 'BRN', 'BTN', 'BUR', 'BVT', 'BWA', 'CAF', 'CAN', 'CCK', 'CHE', 'CHL', 'CHN', 'CIV', 'CMR', 'COD', 'COG', 'COK', 'COL', 'COM', 'CPV', 'CRI', 'CTE', 'CUB', 'CUW', 'CXR', 'CYM', 'CYP', 'CZE', 'DEU', 'DJI', 'DMA', 'DNK', 'DOM', 'DZA', 'ECU', 'EGY', 'ERI', 'ESH', 'ESP', 'EST', 'ETH', 'FIN', 'FJI', 'FLK', 'FRA', 'FRO', 'FSM', 'GAB', 'GBR', 'GEO', 'GGY', 'GHA', 'GIB', 'GIN', 'GLP', 'GMB', 'GNB', 'GNQ', 'GRC', 'GRD', 'GRL', 'GTM', 'GUF', 'GUM', 'GUY', 'HKG', 'HMD', 'HND', 'HRV', 'HTI', 'HUN', 'IDN', 'IMN', 'IND', 'IOT', 'IRL', 'IRN', 'IRQ', 'ISL', 'ISR', 'ITA', 'JAM', 'JEY', 'JOR', 'JPN', 'KAZ', 'KEN', 'KGZ', 'KHM', 'KIR', 'KNA', 'KOR', 'KWT', 'LAO', 'LBN', 'LBR', 'LBY', 'LCA', 'LIE', 'LKA', 'LTU', 'LUX', 'LVA', 'MAC', 'MAF', 'MAR', 'MCO', 'MDA', 'MDG', 'MDV', 'MEX', 'MHL', 'MKD', 'MLI', 'MLT', 'MMR', 'MNE', 'MNG', 'MNP', 'MOZ', 'MSR', 'MTQ', 'MUS', 'MYS', 'MYT', 'NAM', 'NCL', 'NER', 'NFK', 'NGA', 'NHB', 'NIC', 'NIU', 'NLD', 'NOR', 'NPL', 'NRU', 'NZL', 'OMN', 'PAK', 'PAN', 'PCN', 'PER', 'PHL', 'PLW', 'PNG', 'POL', 'PRI', 'PRK', 'PRT', 'PRY', 'PSE', 'PYF', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'SAU', 'SCG', 'SDN', 'SEN', 'SGP', 'SGS', 'SHN', 'SJM', 'SLB', 'SLE', 'SLV', 'SMR', 'SOM', 'SPM', 'SRB', 'SSD', 'SUR', 'SVK', 'SVN', 'SWE', 'SWZ', 'SXM', 'SYC', 'SYR', 'TCA', 'TCD', 'TGO', 'THA', 'TJK', 'TKL', 'TKM', 'TLS', 'TON', 'TTO', 'TUN', 'TUR', 'TUV', 'TWN', 'TZA', 'UGA', 'UKR', 'UMI', 'URY', 'USA', 'UZB', 'VAT', 'VCT', 'VEN', 'VGB', 'VIR', 'VNM', 'VUT', 'WLF', 'WSM', 'YEM', 'YUG', 'ZAF', 'ZMB', 'ZWE']



рд╕реНрдерд╛рди


рдЕрдм рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рджреЗрд╢реЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдкрд┐рд╡рдЯ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рднреА рд╣реИ, рд╕реНрддрдВрдн рдореЗрдВ loc ред рдЗрд╕реЗ рдПрдХ рдорд╛рдирдХ рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИ: рди рддреЛ рдЖрдИрдПрд╕рдУ рдФрд░ рди рд╣реА рдУрд▓рдВрдкрд┐рдХ рдХреЛрдб рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдореБрдХреНрдд рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рд╢рд╣рд░, рджреЗрд╢ рдФрд░ рдкрддреЗ рдХреЗ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдореЗрдВ рдХрд╣реАрдВ, рдЖрдЦрд┐рд░реА рдореЗрдВ рдХрд╣реАрдВред рдкрд╛рдЗрдХрд╛рдЙрдВрдЯреНрд░реА рдпрд╣рд╛рдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ - 1922 рдХреА рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП 525 рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдерд╛рди (рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ)ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдЙрдкрдХрд░рдг рдорд┐рд▓рд╛ред рдпрд╣ рдЬрд┐рдпреЛрдлрд╛рдИ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ рдЬрд┐рдпреЛрд▓реЛрдХреЗрдЯрд░ рдиреЛрдорд┐рдирд╛рдЯреАрдо ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
eventdatelocmalesfemalesrustotallink
0Ironman Dubai Duathlon 70.3 20202020-07-02Dubai, United Arab Emirates835215651050тАж
1Ironman Dubai 70.3 20202020-02-07Dubai, United Arab Emirates63813255770тАж
2Israman Half 20202020-01-29Israel, Eilat6701264796тАж
3Ironman Indian Wells La Quinta 70.3 20192019-12-08Indian Wells/La Quinta, California, USA159059362183тАж
4Ironman Taupo 70.3 20192019-12-07New Zealand76742031187тАж
5Ironman Bahrain 70.3 20192019-12-07Manama, Bahrain858214381072тАж
6Ironman Western Australia 20192019-12-01Busselton, Western Australia94022911169тАж
7Ironman Mar del Plata 20192019-12-01Mar del Plata, Argentina506663572тАж
8Ironman Cozumel 20192019-11-24Cozumel, Mexico1158395121553тАж
9Ironman Arizona 20192019-11-24Tempe, Arizona, USA169763332330тАж




from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent='triathlon results researcher')
geolocator.geocode(' , , ', language='en')

Out: Location( , тАУ , , Altaysky District, Altai Krai, Siberian Federal District, Russia, (51.78897945, 85.73956296106752, 0.0))

рдЕрдиреБрд░реЛрдз рдкрд░, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ - рдкрддрд╛ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред рдпрджрд┐ рдЖрдк рднрд╛рд╖рд╛ рдХреЛ, рдпрд╣рд╛рдВ - рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЖрдИрдПрд╕рдУ рдХреЛрдб рдореЗрдВ рдмрд╛рдж рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рджреЗрд╢ рдХреЗ рдорд╛рдирдХ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИ ред рдЪреВрдВрдХрд┐ рдЬрд┐рдпреЛрд▓реЛрдХреЗрдЯрд░ рд╣рд░ рдмрд╛рд░ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреЗрдЬ рдирд╣реАрдВ рд╣реИ рдФрд░ 500 рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП 500 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрддрд░ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрднреА-рдХрднреА рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рдкрд╣рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 130 рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдЖрдПред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рджреЛ рд░рд┐рдЯреНрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, 34 рдирд╛рдореЛрдВ рдХреЛ рдХрдИ рдЖрдЧреЗ рдХреА рд░рд┐рдЯреНрд░реАрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡реЗ рдпрд╣рд╛рдБ рд╣реИрдВ:
['Tongyeong, Korea, Korea, South', 'Constanta, Mamaia, Romania, Romania', 'Weihai, China, China', '. , .', 'Odaiba Marin Park, Tokyo, Japan, Japan', 'Sweden, Smaland, Kalmar', 'Cholpon-Ata city, Resort Center "Kapriz", Kyrgyzstan', 'Luxembourg, Region Moselle, Moselle', 'Chita Peninsula, Japan', 'Kraichgau Region, Germany', 'Jintang, Chengdu, Sichuan Province, China, China', 'Madrid, Spain, Spain', 'North American Pro Championship, St. George, Utah, USA', 'Milan Idroscalo Linate, Italy', 'Dexing, Jiangxi Province, China, China', 'Mooloolaba, Australia, Australia', 'Nathan Benderson Park (NBP), 5851 Nathan Benderson Circle, Sarasota, FL 34235., United States', 'Strathclyde Country Park, North Lanarkshire, Glasgow, Great Britain', 'Quijing, China', 'United States of America , Hawaii, Kohala Coast', 'Buffalo City, East London, South Africa', 'Spain, Vall de Cardener', ', . ', 'Asian TriClub Championship, Hefei, China', 'Taizhou, Jiangsu Province, China, China', ', , ┬л┬╗', 'Buffalo, Gallagher Beach, Furhmann Blvd, United States', 'North American Pro Championship | St. George, Utah, USA', 'Weihai, Shandong, China, China', 'Tarzo - Revine Lago, Italy', 'Lausanee, Switzerland', 'Queenstown, New Zealand, New Zealand', 'Makuhari, Japan, Japan', 'Szombathlely, Hungary']

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдореЗрдВ рджреЗрд╢ рдХрд╛ рджреЛрд╣рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдЗрди рд╢реЗрд╖ рдирд╛рдореЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдерд╛ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкрддреЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рдереЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдкрддреЛрдВ рд╕реЗ рдореИрдВрдиреЗ рдПрдХ рджреЗрд╢ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рджреЗрд╢ рдХреЛ рдкрд┐рд╡рдЯ рдЯреЗрдмрд▓ рдореЗрдВ рдПрдХ рдирдП рдХреЙрд▓рдо рдореЗрдВ рд▓рд┐рдЦрд╛ред рдЪреВрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рднреВ-рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рддреЗрдЬ рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╕реНрдерд╛рди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ - рдЕрдХреНрд╖рд╛рдВрд╢ рдФрд░ рджреЗрд╢рд╛рдВрддрд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╡реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдореЗрдВ рдХрд╛рдо рдЖрдПрдВрдЧреЗред рдЙрд╕рдХреЗ рдмрд╛рдж, pyco.countries.get (name = '...') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП ред Alpha_3 рдиреЗ рдирд╛рдо рд╕реЗ рджреЗрд╢ рдХреА рдЦреЛрдЬ рдХреА рдФрд░ рддреАрди рдЕрдВрдХреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ред
eventdateloccountrylatitudelongitude...
0Ironman Dubai Duathlon 70.3 20202020-07-02Dubai, United Arab EmiratesUnited Arab Emirates25.065755.1713...
1Ironman Dubai 70.3 20202020-02-07Dubai, United Arab EmiratesUnited Arab Emirates25.065755.1713...
2Israman Half 20202020-01-29Israel, EilatIsrael29.556934.9498...
3Ironman Indian Wells La Quinta 70.3 20192019-12-08Indian Wells/La Quinta, California, USAUnited States of America33.7238-116.305...
4Ironman Taupo 70.3 20192019-12-07New ZealandNew Zealand-41.5001172.834...
5Ironman Bahrain 70.3 20192019-12-07Manama, BahrainBahrain26.223550.5822...
6Ironman Western Australia 20192019-12-01Busselton, Western AustraliaAustralia-33.6445115.349...
7Ironman Mar del Plata 20192019-12-01Mar del Plata, ArgentinaArgentina-37.9977-57.5483...
8Ironman Cozumel 20192019-11-24Cozumel, MexicoMexico20.4318-86.9203...
9Ironman Arizona 20192019-11-24Tempe, Arizona, USAUnited States of America33.4255-111.94...
10Ironman Xiamen 70.3 20192019-11-10Xiamen, ChinaChina24.4758118.075...

eventdateloccountrylatitudelongitude...
0Ironman Dubai Duathlon 70.3 20202020-07-02Dubai, United Arab EmiratesARE25.065755.1713...
1Ironman Dubai 70.3 20202020-02-07Dubai, United Arab EmiratesARE25.065755.1713...
2Israman Half 20202020-01-29Israel, EilatISR29.556934.9498...
3Ironman Indian Wells La Quinta 70.3 20192019-12-08Indian Wells/La Quinta, California, USAUSA33.7238-116.305...
4Ironman Taupo 70.3 20192019-12-07New ZealandNZL-41.5001172.834...
5Ironman Bahrain 70.3 20192019-12-07Manama, BahrainBHR26.223550.5822...
6Ironman Western Australia 20192019-12-01Busselton, Western AustraliaAUS-33.6445115.349...
7Ironman Mar del Plata 20192019-12-01Mar del Plata, ArgentinaARG-37.9977-57.5483...
8Ironman Cozumel 20192019-11-24Cozumel, MexicoMEX20.4318-86.9203...
9Ironman Arizona 20192019-11-24Tempe, Arizona, USAUSA33.4255-111.94...
10Ironman Xiamen 70.3 20192019-11-10Xiamen, ChinaCHN24.4758118.075...

рджреВрд░реА


рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд░рд┐рдпрд╛ рдЬрд┐рд╕реЗ рдкрд┐рд╡рдЯ рдЯреЗрдмрд▓ рдкрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдкреНрд░рддреНрдпреЗрдХ рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЧрддрд┐ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЯреНрд░рд╛рдпрдерд▓реЙрди рдореЗрдВ рдЪрд╛рд░ рдореБрдЦреНрдп рджреВрд░рд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ - рд╕реНрдкреНрд░рд┐рдВрдЯ, рдУрд▓рдВрдкрд┐рдХ, рд╕реЗрдореА-рдЖрдпрд░рди рдФрд░ рдЖрдпрд░рдиред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджреМрдбрд╝ рдХреЗ рдирд╛рдореЛрдВ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рджреВрд░реА рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрддрд╛ рд╣реИ - рдпреЗ рд╕реНрдкреНрд░рд┐рдВрдЯ , рдУрд▓рдВрдкрд┐рдХ , рд╣рд╛рдл , рдлреБрд▓ рд╡рд░реНрдб рд╣реИрдВ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди рдЖрдпреЛрдЬрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рджреВрд░рд┐рдпреЛрдВ рдХреЗ рдЕрдкрдиреЗ рдкрджрдирд╛рдо рд╣реИрдВред рдЖрдпрд░рдирдореИрди рдХрд╛ рдЖрдзрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 70.3 рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рджреВрд░реА рдореЗрдВ рдореАрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ, рдУрд▓рдВрдкрд┐рдХ - 5150 рдХрд┐рд▓реЛрдореАрдЯрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ (51.5) рд╕реЗ, рдФрд░ рд▓реЛрд╣реЗ рдХреЛ рдкреВрд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИрдпрд╛, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдХрдореА рдХреЗ рд░реВрдк рдореЗрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдпрд░рдирдореИрди рдПрд░рд┐рдЬрд╝реЛрдирд╛ 2019 ред рдЖрдпрд░рдирдореИрди - рд╡рд╣ рд▓реЛрд╣реЗ рд╣реИ! рдЪреБрдиреМрддреА рдореЗрдВ, рд▓реЛрд╣реЗ рдХреА рджреВрд░реА рдХреЛ рд▓рд╛рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдФрд░ рдЕрд░реНрдз- рд▓реЛрд╣реЗ рдХреА рджреВрд░реА рдХреЛ рдордзреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рд╣рдорд╛рд░реЗ рд░реВрд╕реА рдЖрдпрд░рдирд╕реНрдЯрд╛рд░ рдХрд╛ рдорддрд▓рдм 226 рдХреЗ рд░реВрдк рдореЗрдВ рднрд░рд╛ рд╣реБрдЖ рд╣реИ , рдФрд░ 113 рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдзрд╛ - рдХрд┐рд▓реЛрдореАрдЯрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдкреВрд░реНрдг рдФрд░ рдЖрдзреЗ рд╢рдмреНрдж рднреА рдореМрдЬреВрдж рд╣реИрдВред рдЕрдм рдпрд╣ рд╕рдм рдЬреНрдЮрд╛рди рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдирд╛рдореЛрдВ рдореЗрдВ рдореМрдЬреВрдж рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рднреА рдЬрд╛рддрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред

sprints = rs.loc[[i for i in rs.index if 'sprint' in rs.loc[i, 'event'].lower()]]
olympics1 = rs.loc[[i for i in rs.index if 'olympic' in rs.loc[i, 'event'].lower()]]
olympics2 = rs.loc[[i for i in rs.index if '5150' in rs.loc[i, 'event'].lower()]]
olympics = pd.concat([olympics1, olympics2])
#тАж   

rsd = pd.concat([sprints, olympics, halfs, fulls]) 

рдореЗрдВ рдЖрд░рдПрд╕рдбреА рдпрд╣ рджреМрдбрд╝ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ 1 925 рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдирд┐рдХрд▓рд╛, рдпрд╣ рд╣реИ рдХрд┐, рддреАрди рдФрд░, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рджреЛ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдиреАрдЪреЗ рдЧрд┐рд░ рдЧрдпрд╛ред рдЖрдЗрдП рдЙрди рдкрд░ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ:

rsd[rsd.duplicated(keep=False)]['event'].sort_index()

eventdateloccountrylatitudelongitude...
38Temiradam 113 Half 20192019-09-22,KAZ43.652151.158...
38Temiradam 113 Half 20192019-09-22,KAZ43.652151.158...
65Triway Olympic Sprint 20192019-09-08, --RUS47.221439.7114...
65Triway Olympic Sprint 20192019-09-08, --RUS47.221439.7114...
82Ironman Dun Laoghaire Full Swim 70.3 20192019-08-25Ireland, Dun LaoghaireIRL53.2923-6.13601...
82Ironman Dun Laoghaire Full Swim 70.3 20192019-08-25Ireland, Dun LaoghaireIRL53.2923-6.13601...
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╣реИред рддреЗрдореАрд░рд╛рдо 113 рд╣рд╛рдл 2019 рдирд╛рдо рдХреА рдкрд╣рд▓реА рдЬреЛрдбрд╝реА рдореЗрдВ рд╣рд╛рдл рдФрд░ 113 рджреЛрдиреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рджреЛрдиреЛрдВ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЧрдпрд╛ред рдЕрдЧрд▓рд╛ рдЯреНрд░рд╛рдпрд╡реЗ рдУрд▓рдВрдкрд┐рдХ рд╕реНрдкреНрд░рд┐рдВрдЯ 2019 рд╣реИ ред рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдУрд▓рдВрдкрд┐рдХ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЯ рд╣реИрдВ ред рдЖрдк рд░реЗрд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рджреЗрдЦрдХрд░ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордп 1:09 рд╣реИред рддреЛ рдпрд╣ рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЯ рд╣реИред рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдУрд▓рдВрдкрд┐рдХ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред
placesexnamecountrygroupplace in groupswimt1biket2runresult
01MRUSM100:12:2100:00:3100:34:1300:00:2500:21:4901:09:19
12MRUSM200:12:2100:00:2800:34:1500:00:2600:23:0701:10:38
23MRUSM300:14:2000:00:3700:35:4800:00:3400:22:1601:13:35


olympics.drop(65)

рд╣рдо рдЖрдпрд░рдирдореИрди рдбреБрди рд▓рд╛рдШреИрдпрд░ рдлреБрд▓ рд╕реНрд╡рд┐рдо 70.3 2019 рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордп 4:00 рд╣реИред рдпрд╣ рдЖрдзреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рдлреБрд▓ рд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ 85 рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рдПрдВ ред
placesexnamecountrygroupplace in groupswimt1biket2runresult
01MBrownlee, AlistairGBRMPRO100:23:1900:02:1802:21:1900:01:5501:11:4204:00:33
12MSmales, ElliotGBRMPRO200:24:4700:02:0902:29:2600:01:4801:12:4704:10:57
23MBowden, AdamGBRMPRO300:23:2400:02:1802:32:0900:02:0601:13:4904:13:46


fulls.drop(85)

рдЕрдм рд╣рдо рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдореЗрдВ рджреВрд░реА рдХреА рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ:

rs['dist'] = ''

rs.loc[sprints.index,'dist'] = 'sprint'
rs.loc[olympics.index,'dist'] = 'olympic'
rs.loc[halfs.index,'dist'] = 'half'
rs.loc[fulls.index,'dist'] = 'full'

rs.sample(10)

eventplacesexnamecountrygroupplace in group...country rawgroup raw
...566MVladimir KozarSVKM40-448...SVKMOpen 40-44
...8MHANNES COOLBELMPRO11...BELMPRO M
...445FIleana SodaniUSAF45-494...USAF45-49 F
...227FJARLINSKA BozenaPOLF45-492...POLFK45-49
...440FCeline OrrigoniFRAF40-446...FRAF40-44 F
...325MVladimir EckertSVKM40-446...SVKMOpen 40-44
...139FATRASZKIEWICZ MagdaPOLF40-442...POLFK40-44
...18MMarijn de JongeNLDMPRO18...NEDMpro
...574MLuca AndaloITAM40-449...ITAMOpen 40-44
...67MURBANKIEWICZ AleksandraPOLM35-391...POLMK35-39
рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рдЦреБрд▓реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ:

len(rs[rs['dist'] == ''])

Out: 0

рдФрд░ рд╣рдорд╛рд░реЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд, рдЕрд╕реНрдкрд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

rs.loc[[38,65,82],['event','dist']]

eventdist
38Temiradam 113 Half 2019half
65Triway Olympic Sprint 2019sprint
82Ironman Dun Laoghaire Full Swim 70.3 2019half
рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:

pkl.dump(rs, open(r'D:\tri\summary5.pkl', 'wb'))

рдЖрдпреБ рд╕рдореВрд╣


рдЕрдм рд╡рд╛рдкрд╕ рд░реЗрд╕рд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдЬрд╛рдПрдВред

рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд▓рд┐рдВрдЧ, рджреЗрд╢ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдорд╛рдирдХ рд░реВрдк рдореЗрдВ рд▓рд╛рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рджреЛ рдФрд░ рдХреЙрд▓рдо рдмрдиреЗ рд░рд╣реЗ - рд╕рдореВрд╣ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд╛рдо рд╣реАред рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЯреНрд░рд╛рдпрдерд▓реЙрди рдореЗрдВ, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдЖрдпреБ рд╕рдореВрд╣реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдерд╛ рд╣реИред рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рднреА рдЕрдХреНрд╕рд░ рдмрд╛рд╣рд░ рдЦрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдСрдлрд╕реЗрдЯ рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реЗ рд╕рдореВрд╣ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдореЗрдВ рдкрд╣рд▓реЗ рддреАрди рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╕рдореНрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдореВрд╣реЛрдВ рдореЗрдВ, рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЪреИрдВрдкрд┐рдпрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдиреБ рдкрд░ред

рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рдХреМрди рд╕реЗ рд╕рдореВрд╣ рдореМрдЬреВрдж рд╣реИрдВред

rd = pkl.load(open(r'D:\tri\details2.pkl', 'rb'))
ar = pd.concat(rd)
ar['group'].unique()

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдореВрд╣реЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдереА - 581ред рд╕реМ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪрдпрдирд┐рдд рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ:
['MSenior', 'FAmat.', 'M20', 'M65-59', 'F25-29', 'F18-22', 'M75-59', 'MPro', 'F24', 'MCORP M', 'F21-30', 'MSenior 4', 'M40-50', 'FAWAD', 'M16-29', 'MK40-49', 'F65-70', 'F65-70', 'M12-15', 'MK18-29', 'M50up', 'FSEMIFINAL 2 PRO', 'F16', 'MWhite', 'MOpen 25-29', 'F', 'MPT TRI-2', 'M16-24', 'FQUALIFIER 1 PRO', 'F15-17', 'FSEMIFINAL 2 JUNIOR', 'FOpen 60-64', 'M75-80', 'F60-69', 'FJUNIOR A', 'F17-18', 'FAWAD BLIND', 'M75-79', 'M18-29', 'MJUN19-23', 'M60-up', 'M70', 'MPTS5', 'F35-40', "M'S PT1", 'M50-54', 'F65-69', 'F17-20', 'MP4', 'M16-29', 'F18up', 'MJU', 'MPT4', 'MPT TRI-3', 'MU24-39', 'MK35-39', 'F18-20', "M'S", 'F50-55', 'M75-80', 'MXTRI', 'F40-45', 'MJUNIOR B', 'F15', 'F18-19', 'M20-29', 'MAWAD PC4', 'M30-37', 'F21-30', 'Mpro', 'MSEMIFINAL 1 JUNIOR', 'M25-34', 'MAmat.', 'FAWAD PC5', 'FA', 'F50-60', 'FSenior 1', 'M80-84', 'FK45-49', 'F75-79', 'M<23', 'MPTS3', 'M70-75', 'M50-60', 'FQUALIFIER 3 PRO', 'M9', 'F31-40', 'MJUN16-19', 'F18-19', 'M PARA', 'F35-44', 'MParaathlete', 'F18-34', 'FA', 'FAWAD PC2', 'FAll Ages', 'M PARA', 'F31-40', 'MM85', 'M25-39']



ar['group'].value_counts()[:30]

Out:
M40-44 199157
M35-39 183738
M45-49 166796
M30-34 154732
M50-54 107307
M25-29 88980
M55-59 50659
F40-44 48036
F35-39 47414
F30-34 45838
F45-49 39618
MPRO 38445
F25-29 31718
F50-54 26253
M18-24 24534
FPRO 23810
M60-64 20773
M 12799
F55-59 12470
M65-69 8039
F18-24 7772
MJUNIOR 6605
F60-64 5067
M20-24 4580
FJUNIOR 4105
M30-39 3964
M40-49 3319
F 3306
M70-74 3072
F20-24 2522

рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдкрд╛рдВрдЪ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ, рдЕрд▓рдЧ рд╕реЗ рдкреБрд░реБрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрд▓рдЧ рд╕реЗ рдорд╣рд┐рд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рдкреЗрд╢реЗрд╡рд░ рд╕рдореВрд╣ рд╣реИрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ MPRO рдФрд░ FPRO ред

рддреЛ рд╣рдорд╛рд░рд╛ рдорд╛рдирдХ рд╣реЛрдЧрд╛:

ag = ['MPRO', 'M18-24', 'M25-29', 'M30-34', 'M35-39', 'M40-44', 'M45-49', 'M50-54', 'M55-59', 'M60-64',  'M65-69', 'M70-74', 'M75-79', 'M80-84', 'M85-90', 'FPRO', 'F18-24', 'F25-29', 'F30-34', 'F35-39', 'F40-44',   'F45-49', 'F50-54', 'F55-59', 'F60-64', 'F65-69', 'F70-74', 'F75-79', 'F80-84', 'F85-90']
#ag тАУ age group

рдпрд╣ рд╕реЗрдЯ рд▓рдЧрднрдЧ 95% рд╕рднреА рдлрд╝рд┐рдирд┐рд╢рд░реНрд╕ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред

рдмреЗрд╢рдХ, рд╣рдо рд╕рднреА рд╕рдореВрд╣реЛрдВ рдХреЛ рдЗрд╕ рдорд╛рдирдХ рдкрд░ рдирд╣реАрдВ рд▓рд╛ рдкрд╛рдПрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╣рдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрд░рдХреЗрд╕ рдХреЛ рд▓рд╛рдПрдВрдЧреЗ рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣рдЯрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ: рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдорд╛рдирдХ рдореЗрдВ рдмрджрд▓реЗрдВред
['F25-29F', 'F30-34F', 'F30-34-34', 'F35-39F', 'F40-44F', 'F45-49F', 'F50-54F', 'F55-59F', 'FAG:FPRO', 'FK30-34', 'FK35-39', 'FK40-44', 'FK45-49', 'FOPEN50-54', 'FOPEN60-64', 'MAG:MPRO', 'MK30-34', 'MK30-39', 'MK35-39', 'MK40-44', 'MK40-49', 'MK50-59', 'M40-44', 'MM85-89', 'MOPEN25-29', 'MOPEN30-34', 'MOPEN35-39', 'MOPEN40-44', 'MOPEN45-49', 'MOPEN50-54', 'MOPEN70-74', 'MPRO:', 'MPROM', 'M0-44"']



fix = { 'F25-29F': 'F25-29', 'F30-34F' : 'F30-34', 'F30-34-34': 'F30-34', 'F35-39F': 'F35-39', 'F40-44F': 'F40-44', 'F45-49F': 'F45-49', 'F50-54F': 'F50-54', 'F55-59F': 'F55-59', 'FAG:FPRO': 'FPRO', 'FK30-34': 'F30-34',      'FK35-39': 'F35-39', 'FK40-44': 'F40-44', 'FK45-49': 'F45-49', 'FOPEN50-54': 'F50-54', 'FOPEN60-64': 'F60-64', 'MAG:MPRO': 'MPRO', 'MK30-34': 'M30-34', 'MK30-39': 'M30-39', 'MK35-39': 'M35-39', 'MK40-44': 'M40-44', 'MK40-49': 'M40-49', 'MK50-59': 'M50-59', 'M40-44': 'M40-44', 'MM85-89': 'M85-89', 'MOPEN25-29': 'M25-29', 'MOPEN30-34': 'M30-34', 'MOPEN35-39': 'M35-39', 'MOPEN40-44': 'M40-44', 'MOPEN45-49': 'M45-49', 'MOPEN50-54': 'M50-54', 'MOPEN70-74': 'M70- 74', 'MPRO:' :'MPRO', 'MPROM': 'MPRO', 'M0-44"' : 'M40-44'}

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо ar рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдирдП рд╕рдореВрд╣ рдХреЗ рдХрдЪреНрдЪреЗ рдХреЙрд▓рдо рдореЗрдВ рдореВрд▓ рд╕рдореВрд╣ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ ред

ar['group raw'] = ar['group']

рд╕рдореВрд╣ рдХреЙрд▓рдо рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдирдХ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

len(ar[(ar['group'] != ar['group raw'])&(ar['group']!='')])

Out: 273

рдбреЗрдврд╝ рд▓рд╛рдЦ рдХреЗ рд╕реНрддрд░ рдкрд░ рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ред рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдЖрдк рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рддрдм рддрдХ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред

рдЪрдпрдирд┐рдд 10 рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ: рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд╣реЗрдЬреЗрдВ, рдЗрд╕реЗ рдЖрд░рдбреА рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж ред
eventplacesexnamecountrygroupplace in group...country rawgroup raw
...566MVladimir KozarSVKM40-448...SVKMOpen 40-44
...8MHANNES COOLBELMPRO11...BELMPRO M
...445FIleana SodaniUSAF45-494...USAF45-49 F
...227FJARLINSKA BozenaPOLF45-492...POLFK45-49
...440FCeline OrrigoniFRAF40-446...FRAF40-44 F
...325MVladimir EckertSVKM40-446...SVKMOpen 40-44
...139FATRASZKIEWICZ MagdaPOLF40-442...POLFK40-44
...18MMarijn de JongeNLDMPRO18...NEDMpro
...574MLuca AndaloITAM40-449...ITAMOpen 40-44
...67MURBANKIEWICZ AleksandraPOLM35-391...POLMK35-39


pkl.dump(rd, open(r'D:\tri\details3.pkl', 'wb'))

рдирд╛рдо


рдЕрдм рдЖрдЗрдП рдирд╛рдореЛрдВ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦреЗрдВред рдЖрдЗрдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╛рддрд┐рдпреЛрдВ рд╕реЗ рдЪреБрдирд┐рдВрджрд╛ 100 рдирд╛рдо рджреЗрдЦреЗрдВ:

list(ar['name'].sample(100))

Out: ['Case, Christine', 'Van der westhuizen, Wouter', 'Grace, Scott', 'Sader, Markus', 'Schuller, Gunnar', 'Juul-Andersen, Jeppe', 'Nelson, Matthew', ' ', 'Westman, Pehr', 'Becker, Christoph', 'Bolton, Jarrad', 'Coto, Ricardo', 'Davies, Luke', 'Daniltchev, Alexandre', 'Escobar Labastida, Emmanuelle', 'Idzikowski, Jacek', 'Fairaislova Iveta', 'Fisher, Kulani', 'Didenko, Viktor', 'Osborne, Jane', 'Kadralinov, Zhalgas', 'Perkins, Chad', 'Caddell, Martha', 'Lynaire PARISH', 'Busing, Lynn', 'Nikitin, Evgeny', 'ANSON MONZON, ROBERTO', 'Kaub, Bernd', 'Bank, Morten', 'Kennedy, Ian', 'Kahl, Stephen', 'Vossough, Andreas', 'Gale, Karen', 'Mullally, Kristin', 'Alex FRASER', 'Dierkes, Manuela', 'Gillett, David', 'Green, Erica', 'Cunnew, Elliott', 'Sukk, Gaspar', 'Markina Veronika', 'Thomas KVARICS', 'Wu, Lewen', 'Van Enk, W.J.J', 'Escobar, Rosario', 'Healey, Pat', 'Scheef, Heike', 'Ancheta, Marlon', 'Heck, Andreas', 'Vargas Iii, Raul', 'Seferoglou, Maria', 'chris GUZMAN', 'Casey, Timothy', 'Olshanikov Konstantin', 'Rasmus Nerrand', 'Lehmann Bence', 'Amacker, Kirby', 'Parks, Chris', 'Tom, Troy', 'Karlsson, Ulf', 'Halfkann, Dorothee', 'Szabo, Gergely', 'Antipov Mikhail', 'Von Alvensleben, Alvo', 'Gruber, Peter', 'Leblanc, Jean-Philippe', 'Bouchard, Jean-Francois', 'Marchiotto MASSIMO', 'Green, Molly', 'Alder, Christoph', 'Morris, Huw', 'Deceur, Marc', 'Queenan, Derek', 'Krause, Carolin', 'Cockings, Antony', 'Ziehmer Chris', 'Stiene, John', 'Chmet Daniela', 'Chris RIORDAN', 'Wintle, Mel', ' ', 'GASPARINI CHRISTIAN', 'Westbrook, Christohper', 'Martens, Wim', 'Papson, Chris', 'Burdess, Shaun', 'Proctor, Shane', 'Cruzinha, Pedro', 'Hamard, Jacques', 'Petersen, Brett', 'Sahyoun, Sebastien', "O'Connell, Keith", 'Symoshenko, Zhan', 'Luternauer, Jan', 'Coronado, Basil', 'Smith, Alex', 'Dittberner, Felix', 'N?sman, Henrik', 'King, Malisa', 'PUHLMANN Andre']

рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИред рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдкрд╣рд▓рд╛ рдирд╛рдо рдЕрдВрддрд┐рдо рдирд╛рдо, рдЕрдВрддрд┐рдо рдирд╛рдо рдкрд╣рд▓рд╛ рдирд╛рдо, рдЕрдВрддрд┐рдо рдирд╛рдо, рдкрд╣рд▓рд╛ рдирд╛рдо, рдЕрдВрддрд┐рдо рдирд╛рдо, рдкрд╣рд▓рд╛ рдирд╛рдо , рдЖрджрд┐ред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рд╣реИ, рдПрдХ рдЕрд▓рдЧ рд░рдЬрд┐рд╕реНрдЯрд░, рдХрд╣реАрдВ рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рд╣реИ - рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдоред рдХрдИ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рднреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рд┐рд░рд┐рд▓рд┐рдХ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрд░реВрдкрддрд╛ рднреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдРрд╕реЗ рдкреНрд░рд╛рд░реВрдк рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: "рдЕрдВрддрд┐рдо рдирд╛рдо рдкреНрд░рдердо рдирд╛рдо", "рдкреНрд░рдердо рдирд╛рдо рдЕрдВрддрд┐рдо рдирд╛рдо", "рдкреНрд░рдердо рдирд╛рдо рдордзреНрдп рдирд╛рдо рдЕрдВрддрд┐рдо рдирд╛рдо", "рдЕрдВрддрд┐рдо рдирд╛рдо рдкреНрд░рдердо рдирд╛рдо рдордзреНрдп рдирд╛рдо"ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдордзреНрдп рдирд╛рдо рд▓реИрдЯрд┐рди рд╡рд░реНрддрдиреА рдореЗрдВ рднреА рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ, рд╡реИрд╕реЗ, рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ - рд▓рд┐рдкреНрдпрдВрддрд░рдгред рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрд╣рд╛рдВ рдХреЛрдИ рдордзреНрдп рдирд╛рдо рдирд╣реАрдВ рд╣реИ, рд░рд┐рдХреЙрд░реНрдб рджреЛ рд╢рдмреНрджреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд┐рд╕реНрдкреИрдирд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдирд╛рдо рдкреНрд▓рд╕ рдЙрдкрдирд╛рдо рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рддреАрди рдпрд╛ рдЪрд╛рд░ рд╢рдмреНрдж рд╣реЛрддреЗ рд╣реИрдВред рдбрдЪ рдореЗрдВ рдЙрдкрд╕рд░реНрдЧ рд╡реИрди рд╣реИ, рдЪреАрдиреА рдФрд░ рдХреЛрд░рд┐рдпрд╛рдИ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЖрдорддреМрд░ рдкрд░ рддреАрди рд╢рдмреНрдж рднреА рд╣реЛрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рдкреВрд░реЗ рд░рд┐рдмрд╛рд╕ рдХреЛ рдЕрдирд╕реБрдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХрддрдо рд░реВрдк рдореЗрдВ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рджреМрдбрд╝ рдХреЗ рднреАрддрд░, рдирд╛рдо рдкреНрд░рд╛рд░реВрдк рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рд╣реИрдВ рдХрд┐ рд╣рдо, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЪрд▓рд┐рдП рдирдП рдХреЙрд▓рдо рдирд╛рдо рдХрдЪреНрдЪреЗ рдореЗрдВ рдореМрдЬреВрджрд╛ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ :

ar['name raw'] = ar['name']

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рд▓реИрдЯрд┐рди рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рд╣реИ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рдирд╛рдо рдореЗрдВ рдХреМрди рд╕реЗ рд╡рд░реНрдг рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

set( ''.join(ar['name'].unique()))

Out: [' ', '!', '"', '#', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '|', '\x7f', '\xa0', '┬д', '┬ж', '┬з', '', '┬л', '\xad', '', '┬░', '┬▒', '┬╡', '┬╢', '┬╖', '┬╗', '', '╨Ж', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '╤Ф', '╤Ц', '╤Ю', 'тАУ', 'тАФ', 'тАШ', 'тАЩ', 'тАЪ', 'тАЬ', 'тАЭ', 'тАЮ', 'тАа', 'тАб', 'тАж', 'тА░', 'тА║', '']

рдХреЗрд╡рд▓ рд╡рд╣рд╛рдБ рдХреНрдпрд╛ рд╣реИ! рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрднреА рднреА рд╡рд┐рднрд┐рдиреНрди рдЖрдЙрдЯрд▓реИрдВрдбрд┐рд╢ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ, рдЕрд╡рдзрд┐ 'ред', 'рд╣рд╛рдЗрдлрд╝рди' - ', рдФрд░ рдПрдкреЛрд╕реНрдЯреНрд░реЛрдлрд╝ "'" рдХреЛ рдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЧрд▓рддреА рд╕реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджреЗрдЦрд╛ рдЧрдпрд╛ рдХрд┐ рдХрдИ рдЬрд░реНрдорди рдФрд░ рдиреЙрд░реНрд╡реЗрдЬрд┐рдпрди рдирд╛рдореЛрдВ рдФрд░ рдЙрдкрдирд╛рдореЛрдВ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рд╣реИ? 'ред рд╡реЗ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рдЬрдЧрд╣ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ - '?', 'рдП', 'рдУ', 'рдпреВ',? рдФрд░ рдЕрдиреНрдпред рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ: рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдХреБрдЫ рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдкрд░ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ рднреА рдЖрдПрдЧрд╛ред рд╕рдВрдЦреНрдпрд╛ рдирд╛рдореЛрдВ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдПред
Pierre-Alexandre Petit, Jean-louis Lafontaine, Faris Al-Sultan, Jean-Francois Evrard, Paul O'Mahony, Aidan O'Farrell, John O'Neill, Nick D'Alton, Ward D'Hulster, Hans P.J. Cami, Luis E. Benavides, Maximo Jr. Rueda, Prof. Dr. Tim-Nicolas Korf, Dr. Boris Scharlowsk, Eberhard Gro?mann, Magdalena Wei?, Gro?er Axel, Meyer-Szary Krystian, Morten Halkj?r, RASMUSSEN S?ren Balle



bs = [s for s in symbols if not (s.isalpha() or s in " . - ' ? ,")] #bs тАУ bad symbols

bs

Out: ['!', '"', '#', '&', '(', ')', '*', '+', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '>', '@', '[', '\\', ']', '^', '_', '`', '|', '\x7f', '\xa0', '┬д', '┬ж', '┬з', '', '┬л', '\xad', '', '┬░', '┬▒', '┬╢', '┬╖', '┬╗', 'тАУ', 'тАФ', 'тАШ', 'тАЩ', 'тАЪ', 'тАЬ', 'тАЭ', 'тАЮ', 'тАа', 'тАб', 'тАж', 'тА░', 'тА║', '']

рд╣рдо рдЗрди рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗ рдХрд┐ рд╡реЗ рдХрд┐рддрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ:

for s in bs:
    ar['name'] = ar['name'].str.replace(s, '')

corr = ar[ar['name'] != ar['name raw']]

2,184 рдРрд╕реЗ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ, рдпрд╛рдиреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдХреЗрд╡рд▓ 0.15% - рдмрд╣реБрдд рдХрдоред рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ 100 рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

list(corr['name raw'].sample(100))

Out: ['Scha┬╢ffl, Ga?nter', 'Howard, Brian &', 'Chapiewski, Guilherme (Gc)', 'Derkach 1svd_mail_ru', 'Parker H1 Lauren', 'Leal le?n, Yaneri', 'TencA, David', 'Cortas La?pez, Alejandro', 'Strid, Bja┬╢rn', '(Crutchfield) Horan, Katie', 'Vigneron, Jean-Michel.Vigneron@gmail.Com', '\xa0', 'Telahr, JтАаrgen', 'StтАЭrmer, Melanie', 'Nagai B1 Keiji', 'Rinc?n, Mariano', 'Arkalaki, Angela (Evangelia)', 'Barbaro B1 Bonin Anna G:Charlotte', 'Ra?esch, Ja┬╢rg', "CAVAZZI NICCOLO\\'", 'DтАЮnzel, Thomas', 'Ziska, Steffen (Gerhard)', 'Kobilica B1 Alen', 'Mittelholcz, Bala', 'Jimanez Aguilar, Juan Antonio', 'Achenza H1 Giovanni', 'Reppe H2 Christiane', 'Filipovic B2 Lazar', 'Machuca Ka?hnel, Ruban Alejandro', 'Gellert (Silberprinz), Christian', 'Smith (Guide), Matt', 'Lenatz H1 Benjamin', 'Da┬╢llinger, Christian', 'Mc Carthy B1 Patrick Donnacha G:Bryan', 'Fa┬╢llmer, Chris', 'Warner (Rivera), Lisa', 'Wang, Ruijia (Ray)', 'Mc Carthy B1 Donnacha', 'Jones, Nige (Paddy)', 'SchтАЭler, Christoph', '\xa0', 'Holthaus, Adelhard (Allard)', 'Mi;Arro, Ana', 'Dr: Koch Stefan', '\xa0', '\xa0', 'Ziska, Steffen (Gerhard)', 'Albarraca\xadn Gonza?lez, Juan Francisco', 'Ha┬╢fling, Imke', 'Johnston, Eddie (Edwin)', 'Mulcahy, Bob (James)', 'Gottschalk, BjтАЭrn', '\xa0', 'Gretsch H2 Kendall', 'Scorse, Christopher (Chris)', 'KielтАЪbasa, Pawel', 'Kalan, Magnus', 'Roderick "eric" SIMBULAN', 'Russell;, Mark', 'ROPES AND GRAY TEAM 3', 'Andrade, H?┬жCTOR DANIEL', 'Landmann H2 Joshua', 'Reyes Rodra\xadguez, Aithami', 'Ziska, Steffen (Gerhard)', 'Ziska, Steffen (Gerhard)', 'Heuza, Pierre', 'Snyder B1 Riley Brad G:Colin', 'Feldmann, Ja┬╢rg', 'Beveridge H1 Nic', 'FAGES`, perrine', 'Frank", Dieter', 'Saarema┬дel, Indrek', 'Betancort Morales, AridaтАУy', 'Ridderberg, Marie_Louise', '\xa0', 'Ka┬╢nig, Johannes', 'W Van(der Klugt', 'Ziska, Steffen (Gerhard)', 'Johnson, Nick26', 'Heinz JOHNER03', 'Ga┬╢rg, Andra', 'Maruo B2 Atsuko', 'Moral Pedrero H1 Eva Maria', '\xa0', 'MATUS SANTIAGO Osc1r', 'Stenbrink, Bja┬╢rn', 'Wangkhan, Sm1.Thaworn', 'Pullerits, Ta┬╢nu', 'Clausner, 8588294149', 'Castro Miranda, Josa Ignacio', 'La┬╢fgren, Pontuz', 'Brown, Jann ( Janine )', 'Ziska, Steffen (Gerhard)', 'Koay, Sa┬╢ren', 'Ba┬╢hm, Heiko', 'Oleksiuk B2 Vita', 'G Van(de Grift', 'Scha┬╢neborn, Guido', 'Mandez, A?lvaro', 'Garca\xada Fla?rez, Daniel']

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдмрд╣реБрдд рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдпрд╣ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛: рд╕рднреА рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╡рд░реНрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рд╕реНрдкреЗрд╕, рдПрдХ рд╣рд╛рдЗрдлрди, рдПрдХ рдПрдкреЙрд╕реНрдЯреНрд░реЙрдлреА рдФрд░ рдПрдХ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди, рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо, рдПрдХ рдЕрд╡рдзрд┐ рдФрд░ рдПрдХ '\ xa0' рдкреНрд░рддреАрдХ рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде, рдФрд░ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рд╡рд╣ рд╣реИ, рдмрд╕ рд╣рдЯрд╛рдПрдВред

ar['name'] = ar['name raw']

for s in symbols:
    if s.isalpha() or s in " - ? '":        
        continue        
    if s in ".,\xa0":
        ar['name'] = ar['name'].str.replace(s, ' ')       
    else:
        ar['name'] = ar['name'].str.replace(s, '')

рдлрд┐рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ:

ar['name'] = ar['name'].str.split().str.join(' ')
ar['name'] = ar['name'].str.strip() #   

рджреЗрдЦрддреЗ рд╣реИ рдХреНрдпрд╛ рд╣реБрдЖ:

ar.loc[corr.index].sample(10)

placesexnamecountry...name raw
6364MCurzillat B MARANO Annouck GJulieFRA...Curzillat B1 MARANO Annouck G:Julie
425426MNaranjo Quintero CndidoESP...Naranjo Quintero, CтАбndido
13471348FChang Margaret PeggyUSA...Chang, Margaret (Peggy)
790791MGonzalez RubenPRI...Gonzalez`, Ruben
15621563MGarcia Hernandez EliasMEX...Garcia Hernandez/, Elias
5051MReppe H ChristianeDEU...Reppe H2 Christiane
528529MHo ShihkenTWN...Ho, ShihтАФken
819820MElmously A R AbdelrahmanEGY...Elmously, A.R. (Abdelrahman)
249250Fboyer IsabelleTHA...`boyer, Isabelle
744745MGarcaa Morales Pedro LucianoESP...Garca┬мa Morales, Pedro Luciano
рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╢реНрдирд╡рд╛рдЪрдХ рдЪрд┐рдиреНрд╣ рд╡рд╛рд▓реЗ рдирд╛рдо рд╣реИрдВред

qmon = ar[(ar['name'].str.replace('?', '').str.strip() == '')&(ar['name']!='')] #qmon тАУ question mark only names

рдЙрдирдореЗрдВ рд╕реЗ 3,429 рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдПрдХ рд╣реА рдорд╛рдирдХ рдкрд░ рдирд╛рдо рд▓рд╛рдиреЗ рдХрд╛ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╕рдорд╛рди рдирд╛рдореЛрдВ рдХреЛ рд╕рдорд╛рди рджрд┐рдЦрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдХреЗрд╡рд▓ рдкреНрд░рд╢реНрдирд╡рд╛рдЪрдХ рдЪрд┐рд╣реНрдиреЛрдВ рд╡рд╛рд▓реЗ рдирд╛рдореЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рдХреЗрд╡рд▓ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реНрдг рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рдирд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрди рд╕рднреА рдХреЛ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
placesexnamecountrygroupplace in group...country rawgroup rawname raw
818819M???? ???JPNM45-49177...JPNM45-49????, ???
11011102M?? ??JPNM50-54159...JPNM50-54??, ??
162163M? ??CHNM30-3422...CHNM30-34?, ??
12711272F???? ????JPNF50-5415...JPNF50-54????, ????
552553M??? ??JPNM25-2930...JPNM25-29???, ??
423424M??? ????JPNM55-5924...JPNM55-59???, ????
936937F?? ??JPNF50-547...JPNF50-54??, ??
244245M? ??KORM50-5430...KORM50-54?, ??
627628M? ?CHNM40-4494...CHNM40-44?, ?
194195M?????? ?????RUS188...RUSM?????? ?????


ar.loc[qmon.index, 'name'] = ''

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдЬрд╣рд╛рдВ рдирд╛рдо рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ 3,454 рд╣реИред рдЗрддрдирд╛ рдирд╣реАрдВ - рд╣рдо рдЬреАрд╡рд┐рдд рд░рд╣реЗрдВрдЧреЗред рдЕрдм рдЬрдм рд╣рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкрд╛рддреНрд░реЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд▓рд┐рдкреНрдпрдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдПрдВ рддрд╛рдХрд┐ рджреЛрд╣рд░рд╛ рдХрд╛рдо рди рдХрд░реЗрдВред

ar['name'] = ar['name'].str.lower()

рдЕрдЧрд▓рд╛, рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдПрдВ:

trans = {'':'a', '':'b', '':'v', '':'g', '':'d', '':'e', '':'e', '':'zh', '':'z',  '':'i', '':'y', '':'k', '':'l', '':'m', '':'n', '':'o', '':'p', '':'r', '':'s', '':'t', '':'u', '':'f', '':'kh', '':'ts', '':'ch', '':'sh', '':'shch', '':'', '':'y', '':'', '':'e', '':'yu', '':'ya', '╤Ф':'e', '╤Ц': 'i','╤Ю':'w','┬╡':'m'}

рдЗрд╕рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рд┐рд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЕрдХреНрд╖рд░ рднреА рд╢рд╛рдорд┐рд▓ рдереЗ - ',', '' ',' the ' , рдЬреЛ рдмреЗрд▓рд╛рд░реВрд╕реА рдФрд░ рдпреВрдХреНрд░реЗрдиреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЧреНрд░реАрдХ рдЕрдХреНрд╖рд░ ' ┬╡ 'рднреА ред рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

for s in trans:
    ar['name'] = ar['name'].str.replace(s, trans[s])

рдЕрдм, рдХрд╛рдо рдХреЗ рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рд╕реЗ, рд╣рдо рд╕рдм рдХреБрдЫ рдкрд░рд┐рдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рдФрд░ рдЕрдВрддрд┐рдо рдирд╛рдо рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:

ar['name'] = ar['name'].str.title()

рджреЗрдЦрддреЗ рд╣реИ рдХреНрдпрд╛ рд╣реБрдЖред

ar[ar['name raw'].str.lower().str[0].isin(trans.keys())].sample(10)

placesexname...country rawname raw
99100MNikolay Golovkin...RUS
9596MMaksim Vasilevich Chubakov...RUS
325326FGanieva Aygul...RUS
661662MMaksut Nizamutdinov...RUS
356357FKolobanova Svetlana...RUS
117118MGuskov Vladislav...RUS
351352MKolesnikov Dmitriy...RUS
9293MKuznetsov Oleg...RUS
5051MKhoraykin Maksim...RUS
67MBrylev Aleksey...RUS
рдЕрдВрдд рдореЗрдВ, рдЕрджреНрд╡рд┐рддреАрдп рд╡рд░реНрдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

set( ''.join(ar['name'].unique()))

Out: [' ', "'", '-', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

рд╕рдм рд╕рд╣реА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕реБрдзрд╛рд░реЛрдВ рдиреЗ 1,253,882 рдпрд╛ 89% рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛, рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 660,207 рд╕реЗ рдШрдЯрдХрд░ 599,186 рд╣реЛ рдЧрдИ, рдЕрд░реНрдерд╛рдд 61 рд╣рдЬрд╛рд░ рдпрд╛ рд▓рдЧрднрдЧ 10%ред рд╡рд╛рд╣! Rd рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╡рд╛рдкрд╕ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рдВрдШ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ ред

pkl.dump(rd, open(r'D:\tri\details4.pkl', 'wb'))

рдЕрдм рд╣рдореЗрдВ рдЖрджреЗрд╢ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ - рдкрд╣рд▓рд╛ рдирд╛рдо рдЕрдВрддрд┐рдо рдирд╛рдо рдпрд╛ рдЕрдВрддрд┐рдо рдирд╛рдо рдкрд╣рд▓рд╛ рдирд╛рдо ред рдХреМрди рд╕рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдирд╛рдо рдФрд░ рдЙрдкрдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдордзреНрдп рдирд╛рдо рднреА рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реЛ - рдХрд╣реАрдВ рдордзреНрдп рдирд╛рдо рдХреЗ рд╕рд╛рде, рдХрд╣реАрдВ рдмрд┐рдирд╛ред рдЗрд╕рд╕реЗ рдЙрд╕рдХреА рдкрд╣рдЪрд╛рди рдмрд╛рдзрд┐рдд рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдмреАрдЪ рдХрд╛ рдирд╛рдо рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдкреБрд░реБрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдкреЗрдЯреНрд░реЛрдирд╛рдорд┐рдХреНрд╕ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ "hiv" рдФрд░ рдорд╣рд┐рд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП "vna" рд╣реЛрддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рдЕрдкрд╡рд╛рдж рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - Ilyich, Ilyinichna, Nikitich, Nikitichnaред рд╕рдЪ рд╣реИ, рдРрд╕реЗ рдмрд╣реБрдд рдХрдо рдЕрдкрд╡рд╛рдж рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рднреАрддрд░ рдирд╛рдореЛрдВ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╕реНрдерд╛рдпреА рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдВрд░рдХреНрд╖рдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рджреМрдбрд╝ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрддрдВрдн рдирд╛рдо рдореЗрдВ "vich" рдФрд░ "vna" рдЕрдВрд╢реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдЬреНрдЮрд╛рдд рдХрд░реЗрдВрдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдпрджрд┐ рдпреЗ рд╕рдВрдЦреНрдпрд╛ рдХрд░реАрдм рд╣реИрдВ, рддреЛ рдПрдХ рдордзреНрдп рдирд╛рдо рд╣реИ, рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВред рд╕рдЦреНрдд рдореИрдЪ рдХреА рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреМрдбрд╝ рдореЗрдВ рдЬрд╣рд╛рдВ рдордзреНрдпрдо рдирд╛рдо рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рджреЗрд╢реА рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдРрд╕рд╛ рднреА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рднрд╛рдЧреА рдЕрдкрдиреЗ рдордзреНрдп рдирд╛рдо рдХреЛ рдмрддрд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВ рднреВрд▓ рд╕рдХрддрд╛ рдерд╛ред рджреВрд╕рд░реА рдУрд░, "рд╡рд┐рдЪ" рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдирд╛рдо рднреА рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдмреЗрд▓рд╛рд░реВрд╕ рдФрд░ рдЕрдиреНрдп рджреЗрд╢реЛрдВ рдореЗрдВ рд╕реНрд▓рд╛рд╡ рд╕рдореВрд╣ рдХреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рд▓рд┐рдкреНрдпрдВрддрд░рдг рдХрд┐рдпрд╛ред рд▓рд┐рдкреНрдпрдВрддрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдордзреНрдп рдирд╛рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢реБрд░реВ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реИрдЯрд┐рди рдореЗрдВ рд╣реИред рддреЛ рд╕рдм рдареАрдХ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрди рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдореЗрдВ рдХреЙрд▓рдо рдореЗрдВ "vich" рдФрд░ "vna" рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИрдирд╛рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдХреБрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ 50% рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

wp = {} #wp тАУ with patronymic 

for e in rd:
    nvich = (''.join(rd[e]['name'])).count('vich') 
    nvna = (''.join(rd[e]['name'])).count('vna')
    if nvich + nvna > 0.5*len(rd[e]):
        wp[e] = rd[e]

рдРрд╕реЗ 29 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВред рдФрд░ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЕрдЧрд░ 50% рдХреЗ рдмрдЬрд╛рдп рд╣рдо 20% рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд 70% рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рд╡рд╣реА 29 рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдпрд╛ред рддрджрдиреБрд╕рд╛рд░, 20% рд╕реЗ рдХрдо - рдЙрдкрдирд╛рдореЛрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡, 70% рд╕реЗ рдЕрдзрд┐рдХ - рдордзреНрдп рдирд╛рдореЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдкреНрд░рднрд╛рд╡ред рдзреБрд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреА рдорджрдж рд╕реЗ рджреЗрд╢ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ 25 рд░реВрд╕ рдореЗрдВ рдереЗ, 4 рдЕрдмрдХрд╛рдЬрд╝рд┐рдпрд╛ рдореЗрдВред рдЖрдЧреЗ рдмрдврд╝рддреЗ рд░рд╣рдирд╛ред рд╣рдо рдХреЗрд╡рд▓ рддреАрди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐, рдЬрд╣рд╛рдБ рдХреЛрдИ рдирд╛рдо рд╣реИ (рд╕рдВрднрд╡рддрдГ) рдЕрдВрддрд┐рдо рдирд╛рдо, рдкрд╣рд▓рд╛ рдирд╛рдо рдФрд░ рдордзреНрдп рдирд╛рдоред
placesexnamecountry...name raw
01MYaroslav Stanislavovich PavlishchevRUS...
12MVladimir Vasilevich PerezhiginRUS...
23MVladislav Evgenevich LitvinchukRUS...
34MSergey Gennadevich GavrilenkoRUS...
45MIvan Markovich MarkinRUS...
56MNikolay Evgenevich SokolovRUS...Nikolay Evgenevich Sokolov
67MAram Pavlovich KukhtievRUS...
78MAndrey Anatolevich AndreevRUS...
89MDenis Valerevich BulgakovRUS...
910MAleksandr Ivanovich KutsRUS...




sum_n3w = 0 # sum name of 3 words
sum_nnot3w = 0 # sum name not of 3 words

for e in wp: 
    sum_n3w += len([n for n in wp[e]['name'] if len(n.split()) == 3])
    sum_nnot3w += len(wp[e]) - n3w

рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдмрд╣реБрдордд 86% рд╣реИред рдЕрдм рдЙрди рддреАрди рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрд▓рдо name0, name1, name2 рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :

for e in wp:
    ind3 = [i for i in rd[e].index if len(rd[e].loc[i,'name'].split()) == 3]
    rd[e]['name0'] = ''
    rd[e]['name1'] = ''
    rd[e]['name2'] = ''
    rd[e].loc[ind3, 'name0'] = rd[e].loc[ind3,'name'].str.split().str[0]
    rd[e].loc[ind3, 'name1'] = rd[e].loc[ind3,'name'].str.split().str[1]
    rd[e].loc[ind3, 'name2'] = rd[e].loc[ind3,'name'].str.split().str[2]

рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ: рдпрд╣рд╛рдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рджреЛ рдШрдЯрдХреЛрдВ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рд╕реНрддрдВрдн рдХрд╛ рдордзреНрдп рдирд╛рдо рд╣реИред рдХреЗрд╡рд▓ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - name1, name2 , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирдпрд╛ рдирд╛рдо рдПрдХрддреНрд░ рдХрд░реЗрдВрдЧреЗред
namename0name1name2...name raw
0Lekomtsev Denis NikolaevichLekomtsevDenisNikolaevich...
1Ivanov Andrey AleksandrovichIvanovAndreyAleksandrovich...
2Ivanov Evgeniy VasilevichIvanovEvgeniyVasilevich...
3Setepov Vladislav...
4Mishanin Sergey YurevichMishaninSergeyYurevich...
5Baranov Andrey AleksandrovichBaranovAndreyAleksandrovich...
6Nakaryakov Dmitriy ValerevichNakaryakovDmitriyValerevich...
7Tretyakov Dmitriy ValentinovichTretyakovDmitriyValentinovich...
8Kuznetsov Stanislav VladimirovichKuznetsovStanislavVladimirovich...
9Dubrovin Maksim SergeevichDubrovinMaksimSergeevich...
10Karpov Anatoliy SergeevichKarpovAnatoliySergeevich...


for e in wp:    
    n1=(''.join(rd[e]['name1'])).count('vich')+(''.join(rd[e]['name1'])).count('vna')
    n2=(''.join(rd[e]['name2'])).count('vich')+(''.join(rd[e]['name2'])).count('vna')

    if (n1 > n2):
        rd[e]['new name'] = rd[e]['name0'] + ' ' + rd[e]['name2']
    else:
        rd[e]['new name'] = rd[e]['name0'] + ' ' + rd[e]['name1']

namename0name1name2new namename raw
0Gorik Pavel VladimirovichGorikPavelVladimirovichGorik Pavel
1Korobov Oleg AnatolevichKorobovOlegAnatolevichKorobov Oleg
2Pavlishchev Yaroslav StanislavovichPavlishchevYaroslavStanislavovichPavlishchev Yaroslav
3Fedorov Nikolay NikolaevichFedorovNikolayNikolaevichFedorov Nikolay
4Medvedev Andrey AleksandrovichMedvedevAndreyAleksandrovichMedvedev Andrey
5Popov Sergey EduardovichPopovSergeyEduardovichPopov Sergey
6Dumchev Andrey ViktorovichDumchevAndreyViktorovichDumchev Andrey
7Trusov Mikhail VladimirovichTrusovMikhailVladimirovichTrusov Mikhail
8Demichev Yuriy AnatolevichDemichevYuriyAnatolevichDemichev Yuriy
9Pushkin Boris SergeevichPushkinBorisSergeevichPushkin Boris
10Lando Aleksandr BorisovichLandoAleksandrBorisovichLando Aleksandr
рдЕрдм, рдирдП рдирд╛рдо рдХреЛ рдореБрдЦреНрдп рдХреЙрд▓рдо рдирд╛рдо рд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ , рдЬрд╣рд╛рдВ рдпрд╣ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рд╣рд╛рдпрдХ рдХреЙрд▓рдо рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

for e in wp:
    ind = rd[e][rd[e]['new name'].str.strip() != ''].index
    rd[e].loc[ind, 'name'] = rd[e].loc[ind, 'new name']
    rd[e] = rd[e].drop(columns = ['name0','name1','name2','new name'])

placesexnamecountry...name raw
01MYaroslav PavlishchevRUS...
12MVladimir PerezhiginRUS...
23MVladislav LitvinchukRUS...
34MSergey GavrilenkoRUS...
45MIvan MarkinRUS...
56MNikolay SokolovRUS...Nikolay Evgenevich Sokolov
67MAram KukhtievRUS...
78MAndrey AndreevRUS...
89MDenis BulgakovRUS...
910MAleksandr KutsRUS...
1011MAleksandr LandoRUS...
рддреЛ рд╡рд╣ рд╕рдм рд╣реИред рд╣рдордиреЗ 2,035 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдкрд╛рджрди рдХрд┐рдпрд╛ред рдмреБрд░рд╛ рдирд╣реАрдВред рдмрдЪрд╛рдпрд╛ред

pkl.dump(rd, open(r'D:\tri\details5.pkl', 'wb'))

рдЕрдм рдЖрдкрдХреЛ рдирд╛рдореЛрдВ рдХреЛ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓реЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рдирд╛рдо рдХреЗ рдмрд╛рдж рдЕрдВрддрд┐рдо рдирд╛рдо, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдкрд╣рд▓рд╛ рдЕрдВрддрд┐рдо рдирд╛рдо, рдлрд┐рд░ рдкрд╣рд▓рд╛ рдирд╛рдо, рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рднреАред рдХрд┐рд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдм рд╣рдо рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗред рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдереЛрдбрд╝реА рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдкреВрд░рд╛ рдирд╛рдо рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рд╢рдмреНрджреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╣рдордиреЗ рдмреАрдЪ рдХрд╛ рдирд╛рдо рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реЛред

ar['nwin'] = ar['name'].str.count(' ') + 1 # nwin тАУ number of words in name
ar.loc[ar['name'] == '','nwin'] = 0
100*ar['nwin'].value_counts()/len(ar)

рдПрдХ рдирд╛рдо рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд░рд┐рдХреЙрд░реНрдбреНрд╕ (%) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмреЗрд╢рдХ, рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд (91%) рджреЛ рд╢рдмреНрдж рд╣реИрдВ - рд╕рд┐рд░реНрдл рдПрдХ рдирд╛рдо рдФрд░ рдПрдХ рдЙрдкрдирд╛рдоред рд▓реЗрдХрд┐рди рддреАрди рдФрд░ рдЪрд╛рд░ рд╢рдмреНрджреЛрдВ рд╡рд╛рд▓реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рднреА рдмрд╣реБрдд рд╣реИрдВред рдЖрдЗрдП рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдРрд╕реЗ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреА рд░рд╛рд╖реНрдЯреНрд░реАрдпрддрд╛ рдкрд░:
(%)
2128527090.74426
31022207.217066
4224201.582925
034540.243864
523850.168389
64690.033113
1800.005648
7570.004024
850.000353
1040.000282
910.000071


ar[ar['nwin'] >= 3]['country'].value_counts()[:12]

Out:
ESP 28435
MEX 10561
USA 7608
DNK 7178
BRA 6321
NLD 5748
DEU 4310
PHL 3941
ZAF 3862
ITA 3691
BEL 3596
FRA 3323

рдареАрдХ рд╣реИ, рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдкреЗрди рд╣реИ, рджреВрд╕рд░реЗ рдореЗрдВ - рдореИрдХреНрд╕рд┐рдХреЛ, рдПрдХ рд╣рд┐рд╕реНрдкреИрдирд┐рдХ рджреЗрд╢, рд╕рдВрдпреБрдХреНрдд рд░рд╛рдЬреНрдп рдЕрдореЗрд░рд┐рдХрд╛ рд╕реЗ рдЖрдЧреЗ, рдЬрд╣рд╛рдВ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣рд┐рд╕реНрдкреИрдирд┐рдХ рднреА рд╣реИрдВред рдмреНрд░рд╛рдЬреАрд▓ рдФрд░ рдлрд┐рд▓реАрдкреАрдВрд╕ рднреА рд╕реНрдкреЗрдирд┐рд╢ (рдФрд░ рдкреБрд░реНрддрдЧрд╛рд▓реА) рдирд╛рдо рд╣реИрдВред рдбреЗрдирдорд╛рд░реНрдХ, рдиреАрджрд░рд▓реИрдВрдб, рдЬрд░реНрдордиреА, рджрдХреНрд╖рд┐рдг рдЕрдлреНрд░реАрдХрд╛, рдЗрдЯрд▓реА, рдмреЗрд▓реНрдЬрд┐рдпрдо рдФрд░ рдлреНрд░рд╛рдВрд╕ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ, рдмрд╕ рдХрднреА-рдХрднреА рдЙрдкрдирд╛рдо рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрд╕рд░реНрдЧ рдЖрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рд╢рдмреНрдж рд╣реИрдВред рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдорддреМрд░ рдкрд░ рдирд╛рдо рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╢рдмреНрдж рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреЛ, рддреАрди рдХрд╛ рдЙрдкрдирд╛рдоред рдмреЗрд╢рдХ, рдЗрд╕ рдирд┐рдпрдо рдХреЗ рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдм рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд░рдо рд╣реИ: рдирд╛рдо-рдЙрдкрдирд╛рдо рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░ рдореБрдЭреЗ рд╣реБрдЖ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдкрдирд╛рдо рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдЖрдорддреМрд░ рдкрд░ рдирд╛рдореЛрдВ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░реЗ,рдкрд╣рд▓реЗ рдирд╛рдо рдХреА рд▓рдВрдмрд╛рдИ рдЖрдорддреМрд░ рдкрд░ рдЕрдВрддрд┐рдо рдирд╛рдо (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧреИрд░-рд╕рдВрдпреБрдХреНрдд рдЕрдВрддрд┐рдо рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП) рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдХрдо рд╣реИред рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрджреЗрд╢ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдкреВрд░реНрдг рдирд╛рдо рдореЗрдВ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рд╢рдмреНрдж рдЪреБрдиреЗрдВ:

ar['new name'] = ar['name']
ind = ar[ar['nwin'] < 2].index
ar.loc[ind, 'new name'] = '. .' #  ,   str.split()   
ar['wfin'] = ar['new name'].str.split().str[0] #fwin  тАУ first word in name
ar['lwin'] = ar['new name'].str.split().str[-1]#lfin тАУ last word in name

рд╕рдВрдпреБрдХреНрдд ar рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХреЛ рд╡рд╛рдкрд╕ rd рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдирдП рдХреЙрд▓рдо nwin, ns0, ns рдкреНрд░рддреНрдпреЗрдХ рд░реЗрд╕ рдХреЗ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдореЗрдВ рдЖ рдЬрд╛рдПрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ " рдкреНрд░рдердо рдирд╛рдо рдЕрдВрддрд┐рдо рдирд╛рдо" рдФрд░ рд╣рдорд╛рд░реА рдорд╛рдирджрдВрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдБ рдкреВрд░реНрдг рдирд╛рдо рдореЗрдВ рджреЛ рд╢рдмреНрдж рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдирд╛рдо (рдкрд╣рд▓рд╛ рдирд╛рдо) рдХреЛ рдПрдХ рдирдП рдХреЙрд▓рдо рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:

name_surname = {}
surname_name = {}

for e in rd:
    d = rd[e][rd[e]['nwin'] == 2]

    if len(d['fwin'].unique()) < len(d['lwin'].unique()) and len(''.join(d['fwin'])) < len(''.join(d['lwin'])):
        name_surname[e] = d
        rd[e]['first name'] = rd[e]['fwin']

    if len(d['fwin'].unique()) > len(d['lwin'].unique()) and len(''.join(d['fwin'])) > len(''.join(d['lwin'])):
        surname_name[e] = d
        rd[e]['first name'] = rd[e]['lwin']

рдпрд╣ рдирд┐рдореНрди рдирд┐рдХрд▓рд╛: рдСрд░реНрдбрд░ рдлрд░реНрд╕реНрдЯ рдиреЗрдо рд▓рд╛рд╕реНрдЯ рдиреЗрдо - 244 рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдСрд░реНрдбрд░ рд▓рд╛рд╕реНрдЯ рдиреЗрдо рдлрд░реНрд╕реНрдЯ - 1,508 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ред

рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЙрд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рд░рд╛рд╢рд┐ рдХреБрд▓ рд░рд╛рд╢рд┐ рд╕реЗ рдХрдо рд╣реЛ рдЧрдИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ рдорд╛рдирджрдВрдбреЛрдВ рдХреА рдкреВрд░реНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдЦреНрдд рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ рд╕рд╛рде рднреАред рдРрд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдкрджрдВрдб рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдорд╛рдирддрд╛ рд╣реЛред рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдм, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рдордиреЗ рдЖрджреЗрд╢ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ рдпрд╣ 100% рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓реЗ рдирд╛рдо рдХреЙрд▓рдо рд╕реЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╛рдо рдЦреЛрдЬреЗрдВ :

vc = ar['first name'].value_counts()

рдЬреЛ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдорд┐рд▓ рдЪреБрдХреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рд▓реЗрдВ:

pfn=vc[vc>100] #pfn тАУ popular first names

рдЙрдирдореЗрдВ рд╕реЗ 1,673 рдереЗред рдпрд╣рд╛рдВ рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рд╕реМ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЕрдм, рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓реЗрдВрдЧреЗ рдФрд░ рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рдЕрдзрд┐рдХ рдореИрдЪ рд╣реИрдВ - рдирд╛рдо рдХреЗ рдкрд╣рд▓реЗ рд╢рдмреНрдж рдореЗрдВ рдпрд╛ рдЖрдЦрд┐рд░реА рдореЗрдВред рд╣рдо рдХреЗрд╡рд▓ рджреЛ-рд╢рдмреНрдж рдирд╛рдореЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЕрдВрддрд┐рдо рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдорд┐рд▓рд╛рди рд╣реИрдВ, рддреЛ рдЖрджреЗрд╢ рд╕рд╣реА рд╣реИ, рдпрджрд┐ рдкрд╣рд▓реЗ рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╡рд┐рдкрд░реАрдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд╕ рдХреЗ рд╕рд╛рде рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╛рдореЛрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реВрдЪреА рдореЗрдВ рдЙрдирдХреЗ рдЕрдЧрд▓реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдЙрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реВрдЪреА рдореЗрдВ рдХреБрдЫ рдореИрдЪ рд╣реИрдВ рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдЪрдХреНрд░ рдХреЗ рдЕрдВрдд рдХреЗ рдкрд╛рд╕ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реВрдЪреА рд╕реЗ рдирд╛рдореЛрдВ рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреВрд░реНрд╡-рдкреНрд░рдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
['Michael', 'David', 'Thomas', 'John', 'Daniel', 'Mark', 'Peter', 'Paul', 'Christian', 'Robert', 'Martin', 'James', 'Andrew', 'Chris', 'Richard', 'Andreas', 'Matthew', 'Brian', 'Patrick', 'Scott', 'Kevin', 'Stefan', 'Jason', 'Eric', 'Christopher', 'Alexander', 'Simon', 'Mike', 'Tim', 'Frank', 'Stephen', 'Steve', 'Andrea', 'Jonathan', 'Markus', 'Marco', 'Adam', 'Ryan', 'Jan', 'Tom', 'Marc', 'Carlos', 'Jennifer', 'Matt', 'Steven', 'Jeff', 'Sergey', 'William', 'Aleksandr', 'Sarah', 'Alex', 'Jose', 'Andrey', 'Benjamin', 'Sebastian', 'Ian', 'Anthony', 'Ben', 'Oliver', 'Antonio', 'Ivan', 'Sean', 'Manuel', 'Matthias', 'Nicolas', 'Dan', 'Craig', 'Dmitriy', 'Laura', 'Luis', 'Lisa', 'Kim', 'Anna', 'Nick', 'Rob', 'Maria', 'Greg', 'Aleksey', 'Javier', 'Michelle', 'Andre', 'Mario', 'Joseph', 'Christoph', 'Justin', 'Jim', 'Gary', 'Erik', 'Andy', 'Joe', 'Alberto', 'Roberto', 'Jens', 'Tobias', 'Lee', 'Nicholas', 'Dave', 'Tony', 'Olivier', 'Philippe']



sbpn = pd.DataFrame(columns = ['event', 'num pop names'], index=range(len(rd))) # sbpn - sorted by popular names

for i in range(len(rd)):
    e = list(rd.keys())[i]
    sbpn.loc[i, 'event'] = e
    sbpn.loc[i, 'num pop names'] = len(set(pfn).intersection(rd[e]['first name']))

sbnp=sbnp.sort_values(by = 'num pop names',ascending=False)
sbnp = sbnp.reset_index(drop=True) 

eventnum pop names
0Ironman World Championship 70.3 2016811
1Ironman World Championship 2019781
2Ironman World Championship 70.3 2015778
3Ironman Mallorca 70.3 2014776
4Ironman World Championship 2018766
5Challenge Roth Long 2019759
.........
1917Challenge Gran Canaria Olympic 20190
1918Challenge Gran Canaria Middle 20170
1919Challenge Forte Village-Sardinia Sprint 20170
1920ITU European Cup Kuopio Sprint 20070
1921ITU World Cup Madeira Olympic 20020


tofix = []

for i in range(len(rd)):
    e = sbpn.loc[i, 'event']

    if len(set(list(rd[e]['fwin'])).intersection(pfn)) > len(set(list(rd[e]['lwin'])).intersection(pfn)):
        tofix.append(e)
        pfn = list(set(pfn + list(rd[e]['fwin'])))
    else:
        pfn = list(set(pfn + list(rd[e]['lwin'])))

235 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдереЗред рдпрд╣реА рд╣реИ, рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди (244) рдореЗрдВ рд╣реБрдЖ рдерд╛ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЪреБрдирд┐рдВрджрд╛ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗ рдкрд╣рд▓реЗ рддреАрди рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЛ рджреЗрдЦрд╛, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдерд╛ред рдпрд╣ рднреА рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдХреНрд▓рд╛рд╕ рдиреЗрдо рд╕рд░рдиреЗрдо рд╕реЗ 36 рдЭреВрдареА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рджреАрдВ рдФрд░ рдХреНрд▓рд╛рд╕ рдиреЗрдо рдХреЗ рдирд╛рдо рд╕реЗ 2 рдЭреВрдареЗ ред рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗ рдкрд╣рд▓реЗ рддреАрди рд░рд┐рдХреЙрд░реНрдб рдХреЛ рджреЗрдЦрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреВрд╕рд░реЗ рдЪрд░рдг рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЙрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдЬрд╣рд╛рдВ рдЧрд▓рдд рдХреНрд░рдо рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

for e in tofix:
    ind = rd[e][rd[e]['nwin'] > 1].index
    rd[e].loc[ind,'name'] = rd[e].loc[ind,'name'].str.split(n=1).str[1] + ' ' +                   rd[e].loc[ind,'name'].str.split(n=1).str[0]

рдпрд╣рд╛рдБ рд╡рд┐рднрд╛рдЬрди рдореЗрдВ, рд╣рдордиреЗ рдкреИрд░рд╛рдореАрдЯрд░ n рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ ред рддрд░реНрдХ рдпрд╣ рд╣реИ: рдПрдХ рдирд╛рдо рдПрдХ рд╢рдмреНрдж рд╣реИ, рдПрдХ рдкреВрд░реНрдг рдирд╛рдо рдореЗрдВ рдкрд╣рд▓рд╛ред рдмрд╛рдХреА рд╕рдм рдПрдХ рдЙрдкрдирд╛рдо рд╣реИ (рдХрдИ рд╢рдмреНрджреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдмрд╕ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реИрдк рдХрд░реЗрдВред

рдЕрдм рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реНрддрдВрднреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрдЪрд╛рддреЗ рд╣реИрдВ:

for e in rd:
    rd[e] = rd[e].drop(columns = ['new name', 'first name', 'fwin','lwin', 'nwin'])

pkl.dump(rd, open(r'D:\tri\details6.pkl', 'wb'))

рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рддрдп рд░рд┐рдХреЙрд░реНрдбреНрд╕: рдХреБрд▓ 108 рд╣рдЬрд╛рд░ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рддрдп рдХрд┐рдП рдЧрдПред рдЕрджреНрд╡рд┐рддреАрдп рдкреВрд░реНрдг рдирд╛рдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 598 рд╕реЗ рдШрдЯрдХрд░ 547 рд╣рдЬрд╛рд░ рд╣реЛ рдЧрдИред рдареАрдХ! рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд╕рд╛рдеред
placesexnamecountrygroup...name raw
188189MAzhel DmitriyBLR...
9697MBostina CristianROU...Cristian Bostina
17571758MLowe JonathanAUSM30-34...Jonathan LOWE
599600MBaerwald ManuelDEU...Manuel BAERWALD
657658MKrumdieck RalfDEU...Ralf KRUMDIECK
354355FKnapp SamanthaUSAF30-34...Samantha Knapp
375376MRintalaulaja MikaFINM40-44...Mika Rintalaulaja
13041305MDee JimUSAM50-54...Jim DEE
178179MHalibert GregFRA...GREG HALIBERT
27402741FComia MarissaUSAF45-49...Marissa COMIA


рднрд╛рдЧ 3. рдЕрдзреВрд░реЗ рдбреЗрдЯрд╛ рдХреА рд╡рд╕реВрд▓реА


рдЕрдм рд▓рд╛рдкрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдФрд░ рдРрд╕реЗ рд╣реИрдВред

рджреЗрд╢


рджреЗрд╢ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЙрди рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЛ рдЦреЛрдЬреЗрдВ рдЬрд┐рдирдореЗрдВ рджреЗрд╢ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ:

arnc = ar[ar['country'] == ''] #arnc тАУ all records with no country

рдЙрдирдореЗрдВ рд╕реЗ 3,221 рд╣реИрдВред рдпрд╣рд╛рдВ 10 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИрдВ:
eventplacesexnamecountrygroup...country raw
...1633MGuerrero Pla AngelM30-34...E
...258MBellm MathiasM35-39...D
...655MMoratto AlessioM40-44...I
...1317MSolari Jean-JacquesM50-54...TAH
...1311FDuranel IsabelleF40-44...F
...1012MEndler MaximilianM40-44...D
...284MSchreiner JorgM40-44...D
...14MButturini Jacopo...ITU
...204MLindner ThomasM40-44...D
...1168MGramke PeterM45-49...D


nnc = arnc['name'].unique() #nnc - names with no country

рдПрдХ рджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдмреАрдЪ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 3 051 рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдпрдерд▓реЙрди рдореЗрдВ рд▓реЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХреЗрд╡рд▓ рдПрдХ рд╣реА рджреМрдбрд╝ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рд╕рдордп-рд╕рдордп рдкрд░, рдХрдИ рдмрд╛рд░ рдПрдХ рд╕реАрдЬрди рдореЗрдВ, рд╡рд░реНрд╖ рд╕реЗ рд╡рд░реНрд╖ рддрдХ, рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛ рдореЗрдВ рдХрдИ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЬрд┐рдирдореЗрдВ рджреЗрд╢ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

arwc = ar[ar['country'] != ''] #arwc тАУ all records with country
nwc = arwc['name'].unique() #nwc тАУ names with country
tofix = set(nnc).intersection(nwc)

Out: ['Kleber-Schad Ute Cathrin', 'Sellner Peter', 'Pfeiffer Christian', 'Scholl Thomas', 'Petersohn Sandra', 'Marchand Kurt', 'Janneck Britta', 'Angheben Riccardo', 'Thiele Yvonne', 'Kie?Wetter Martin', 'Schymik Gerhard', 'Clark Donald', 'Berod Brigitte', 'Theile Markus', 'Giuliattini Burbui Margherita', 'Wehrum Alexander', 'Kenny Oisin', 'Schwieger Peter', 'Grosse Bianca', 'Schafter Carsten', 'Breck Dirk', 'Mautes Christoph', 'Herrmann Andreas', 'Gilbert Kai', 'Steger Peter', 'Jirouskova Jana', 'Jehrke Michael', 'Valentine David', 'Reis Michael', 'Wanka Michael', 'Schomburg Jonas', 'Giehl Caprice', 'Zinser Carsten', 'Schumann Marcus', 'Magoni Livio', 'Lauden Yann', 'Mayer Dieter', 'Krisa Stefan', 'Haberecht Bernd', 'Schneider Achim', 'Gibanel Curto Antonio', 'Miranda Antonio', 'Juarez Pedro', 'Prelle Gerrit', 'Wuste Kay', 'Bullock Graeme', 'Hahner Martin', 'Kahl Maik', 'Schubnell Frank', 'Hastenteufel Marco', тАж]

рдЙрдирдореЗрдВ рд╕реЗ 2,236 рдереЗ, рдпрд╛рдиреА рд▓рдЧрднрдЧ рддреАрди рдЪреМрдерд╛рдИред рдЕрдм, рдЗрд╕ рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЗрд╢ рдХреЛ рдЙрди рдЕрднрд┐рд▓реЗрдЦреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдирд╛рдо рдХрдИ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рд╡рд┐рднрд┐рдиреНрди рджреЗрд╢реЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдпрд╛ рддреЛ рдирд╛рдо рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рд╡реНрдпрдХреНрддрд┐ рдЪрд▓рд╛ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред

fix = {}

for n in tofix:
    nr = arwc[arwc['name'] == n] 
	
    if len(nr['country'].unique()) == 1:
        fix[n] = nr['country'].iloc[0]

рдПрдХ рдкрд╛рд╢ рдореЗрдВ рдмрдирд╛ рд╣реБрдЖред рд▓реЗрдХрд┐рди, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рд▓рдЧрднрдЧ рддреАрди рдорд┐рдирдЯред рдпрджрд┐ рдЕрдзрд┐рдХ рдкрд░рд┐рдорд╛рдгреЛрдВ рдХрд╛ рдХреНрд░рдо рдерд╛, рддреЛ рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рд╡реЗрдХреНрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реЛрдЧрд╛ред 2,013 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдереАрдВ, рдпрд╛ 90% рдХреНрд╖рдорддрд╛ рдереАред

рдРрд╕реЗ рдирд╛рдо рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреЗрд╢ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕ рджреЗрд╢ рдХреЛ рд▓реЗрдВ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

if n not in fix:
    nr = arwc[arwc['name'] == n]
    vc = nr['country'].value_counts()    
	
    if vc[0] > vc[1]:
        fix[n] = vc.index[0]

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдЪ 2,208 рдирд╛рдореЛрдВ рдпрд╛ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ 99% рдХреЗ рд▓рд┐рдП рдкрд╛рдП рдЧрдПред рд╣рдо рдпреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
{'Kleber-Schad Ute Cathrin': 'DEU', 'Sellner Peter': 'AUT', 'Pfeiffer Christian': 'AUT', 'Scholl Thomas': 'DEU', 'Petersohn Sandra': 'DEU', 'Marchand Kurt': 'BEL', 'Janneck Britta': 'DEU', 'Angheben Riccardo': 'ITA', 'Thiele Yvonne': 'DEU', 'Kie?Wetter Martin': 'DEU', 'Clark Donald': 'GBR', 'Berod Brigitte': 'FRA', 'Theile Markus': 'DEU', 'Giuliattini Burbui Margherita': 'ITA', 'Wehrum Alexander': 'DEU', 'Kenny Oisin': 'IRL', 'Schwieger Peter': 'DEU', 'Schafter Carsten': 'DEU', 'Breck Dirk': 'DEU', 'Mautes Christoph': 'DEU', 'Herrmann Andreas': 'DEU', 'Gilbert Kai': 'DEU', 'Steger Peter': 'AUT', 'Jirouskova Jana': 'CZE', 'Jehrke Michael': 'DEU', 'Wanka Michael': 'DEU', 'Giehl Caprice': 'DEU', 'Zinser Carsten': 'DEU', 'Schumann Marcus': 'DEU', 'Magoni Livio': 'ITA', 'Lauden Yann': 'FRA', 'Mayer Dieter': 'DEU', 'Krisa Stefan': 'DEU', 'Haberecht Bernd': 'DEU', 'Schneider Achim': 'DEU', 'Gibanel Curto Antonio': 'ESP', 'Juarez Pedro': 'ESP', 'Prelle Gerrit': 'DEU', 'Wuste Kay': 'DEU', 'Bullock Graeme': 'GBR', 'Hahner Martin': 'DEU', 'Kahl Maik': 'DEU', 'Schubnell Frank': 'DEU', 'Hastenteufel Marco': 'DEU', 'Tedde Roberto': 'ITA', 'Minervini Domenico': 'ITA', 'Respondek Markus': 'DEU', 'Kramer Arne': 'DEU', 'Schreck Alex': 'DEU', 'Bichler Matthias': 'DEU', тАж}



for n in fix:
    ind = arnc[arnc['name'] == n].index
    ar.loc[ind, 'country'] = fix[n]

eventplacesexnamecountrygroup...country raw
...1633MGuerrero Pla AngelESPM30-34...E
...258MBellm MathiasDEUM35-39...D
...655MMoratto AlessioITAM40-44...I
...1317MSolari Jean-JacquesPYFM50-54...TAH
...1311FDuranel IsabelleFRAF40-44...F
...1012MEndler MaximilianDEUM40-44...D
...284MSchreiner JorgDEUM40-44...D
...14MButturini JacopoHRV...ITU
...204MLindner ThomasDEUM40-44...D
...1168MGramke PeterDEUM45-49...D
рд╣рдорд╛рд░реЗ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдмрд╛рдж, рдмрд┐рдирд╛ рдХрд┐рд╕реА рджреЗрд╢ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдШрдЯрдХрд░ 909 рд╣реЛ рдЧрдИ, рдпрд╛рдиреА рддреАрди рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХреБрд▓ 2,208 рдХреА рд╕рдВрдЦреНрдпрд╛ рдбреЗрдврд╝ рдорд┐рд▓рд┐рдпрди рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдЗрддрдиреА рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рд╕рдВрдпреБрдХреНрдд рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХрд╛ рдЕрдиреБрд╡рд╛рдж ar рдореЗрдВ рд╡рд╛рдкрд╕ рд╡рд╛рдВ рд╢рдмреНрджрдХреЛрд╢ рдФрд░ рдЙрд╕реЗ рд╕рд╣реЗрдЬреЗрдВред

pkl.dump(rd, open(r'D:\tri\details7.pkl', 'wb'))

рдордВрдЬрд╝рд┐рд▓


рдЬреИрд╕рд╛ рдХрд┐ рджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕реЗ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд▓рд┐рдВрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

ar[ar['sex'] == '']

рдЙрдирдореЗрдВ рд╕реЗ 2,538 рд╣реИрдВред рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХреБрдЫ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рд╣рдо рдФрд░ рднреА рдХрдо рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдореВрд▓ рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рдирдП рдХреЙрд▓рдо рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред

ar['sex raw'] =ar['sex']

рдЙрди рджреЗрд╢реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдирд╛рдо рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ рдФрд░ рдХрдИ рдирд╛рдо (рдХреБрд▓ 2 101) рд╣реИрдВ рдЬреЛ рджреЛрдиреЛрдВ рд▓рд┐рдВрдЧреЛрдВ рдХреЗ рдирд┐рд╢рд╛рди рдХреЗ рд╕рд╛рде рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

arws = ar[(ar['sex'] != '')&(ar['name'] != '')] #arws тАУ all records with sex
snds = arws[arws.duplicated(subset='name',keep=False)]#sndsтАУsingle name different sex
snds = snds.drop_duplicates(subset=['name','sex'], keep = 'first')
snds = snds.sort_values(by='name')
snds = snds[snds.duplicated(subset = 'name', keep=False)]

snds

eventplacesexnamecountrygroup...country rawgroup rawsex raw
...428FAagaard IdaNORF40-44...NORF40-44F
...718MAagaard IdaNORM40-44...NORM40-44M
740MAarekol Tove AaseNORM50-54...NORM50-54M
...520FAarekol Tove AaseNORF50-54...NORF50-54F
...665FAaroy TorunnNORF40-44...NORF40-44F
...1591MAaroy TorunnNORM40-44...NORM40-44M
...70MAberg Cobo DoloresARGFPRO...ARGFPROM
...1258FAberg Cobo DoloresARGF30-34...ARGF30-34F
...1909FAboulfaida ZinebMARF35-39...MARF35-39F
...340MAboulfaida ZinebMARM35-39...MARM35-39M
...63FAbram FelicityAUSFPRO...AUSFPROF
...38MAbram FelicityAUSFJUNIOR...AUSFJUNIORM
...134MAbramowski JannickeDEUFPRO...GERFPROM
...323FAbramowski JannickeDEUF25-29...GERF25-29F
...21MAbrosimova AnastasiaRUSFPRO...RUSFPROM
...177FAbrosimova AnastasiaRUSFPRO...RUSFPROF
...188MAbysova IrinaRUSFPRO...RUSFPROM
...60FAbysova IrinaRUSFPRO...RUSFPROF
...312MAcaron FabiolaPRIFJUNIOR...PURFJUNIORM
...294FAcaron FabiolaPRIF45-49...PURF45-49F
...1500MAchampong BenjaminGBRM35-39...GBRM35-39M
...749FAchampong BenjaminGBRM35-39...GBRM35-39F
рд╣рд╛рдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпреВрдирд┐рд╕реЗрдХреНрд╕ (рдпрд╛ androgynous) рдирд╛рдо рд╣реИрдВ, рдЬреЛ рдХрд┐ рд▓рдбрд╝рдХреЛрдВ рдФрд░ рд▓рдбрд╝рдХрд┐рдпреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдПрд╢рд┐рдпрд╛рдИ рдПрдерд▓реАрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реЗ рд▓рд┐рдВрдЧ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рдЖрдо рддреМрд░ рдкрд░ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ - рд╢рд╛рдпрдж рдореЗрд░реЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдЗрд░рд┐рдирд╛ рдпрд╛ рдЕрдирд╛рд╕реНрддрд╛рд╕рд┐рдпрд╛ рдирд╛рдо рдПрдХ рдкреБрд░реБрд╖ рдХрд╛ рдерд╛, рдФрд░ рдмреЗрдВрдЬрд╛рдорд┐рди рдХреЛ рдПрдХ рдорд╣рд┐рд▓рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

rss = [rd[e] for e in rd if len(rd[e][rd[e]['sex'] != '']['sex'].unique()) == 1] #rss тАУ races with single sex

рдЙрдирдореЗрдВ рд╕реЗ 633 рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ, рд╕рд┐рд░реНрдл рдорд╣рд┐рд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ, рдкреБрд░реБрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ред рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓реЛрдВ рдореЗрдВ рджреЛрдиреЛрдВ рд▓рд┐рдВрдЧреЛрдВ рдХреЗ рдЖрдпреБ рд╕рдореВрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдкреБрд░реБрд╖ рдЖрдпреБ рд╕рдореВрд╣ рдПрдо , рдорд╣рд┐рд▓рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ - рдкрддреНрд░ рдПрдл рдХреЗ рд╕рд╛рде )ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ рдЖрдпреБ рд╕рдореВрд╣ рдХрд╛ рдирд╛рдо рдкреБрд░реБрд╖реЛрдВ рдХреЗ рд▓рд┐рдП M рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдорд╣рд┐рд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП F рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде ред рдкрд┐рдЫрд▓реЗ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╕реЗрдХреНрд╕ рдХреЙрд▓рдо рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж

'ITU World Cup Tiszaujvaros Olympic 2002'
placesexnamecountrygroup...country rawgroup rawname raw
76MDederko EwaPOLFPRO...POLFPRODederko Ewa
84MChenevier GiuniaITAFPRO...ITAFPROChenevier Giunia
36MO'Grady GrahamNZLMPRO...NZLMPROO'Grady Graham
23MDanek MichalCZEMPRO...CZEMPRODanek Michal
74MPeon CaroleFRAFPRO...FRAFPROPeon Carole
48MHechenblaickner DanielAUTMPRO...AUTMPROHechenblaickner Daniel
70MBlatchford LizGBRFPRO...GBRFPROBlatchford Liz
1MWalton CraigAUSMPRO...AUSMPROWalton Craig
20MHobor PeterHUNMPRO...HUNMPROHobor Peter
56MKaldau SzabolcsHUNMPRO...HUNMPROKaldau Szabolcs
рд╕рдореВрд╣ рдХрд╛ рдирд╛рдо рдЕрднреА рднреА рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдВрдЧ рдХрд╛ рд╕рд╣реА рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдХрдИ рдирдореВрдирд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдпрд╣ рдзрд╛рд░рдгрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдореВрд╣ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд▓рд┐рдВрдЧ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрди рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬреЗрдВ рдЬрд╣рд╛рдБ рд╕рдореВрд╣ рдирд╛рдо рдХрд╛ рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рд▓рд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред рд╣рдо рд╕рдореВрд╣ рд╕рдореВрд╣ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд╛рдо рдХреЛ рдХрдЪреНрдЪрд╛ рд▓реЗрдВрдЧреЗ , рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХрдИ рд░рд┐рдХреЙрд░реНрдб рдПрдХ рд╕рдореВрд╣ рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдП рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдорд╛рдирдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

ar['grflc'] = ar['group raw'].str.upper().str[0] #grflc тАУ group raw first letter capital
grncs = ar[(ar['grflc'].isin(['M','F']))&(ar['sex']!=ar['grflc'])] #grncs тАУ group raw not consistent with sex

рдЗрд╕ рддрд░рд╣ рдХреЗ 26 161 рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рд▓рд┐рдВрдЧ рдХреЛ рдЖрдпреБ рд╕рдореВрд╣ рдХреЗ рдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд╣реА рдХрд░реЗрдВ:

ar.loc[grncs.index, 'sex'] = grncs['grflc']

рдЖрдЗрдП рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦреЗрдВ: рдЕрдЪреНрдЫрд╛ред рд▓рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдЕрдм рдХрд┐рддрдиреЗ рд░рд┐рдХреЙрд░реНрдб рдмрдЪреЗ рд╣реИрдВ?
eventplacesexnamecountrygroup...country rawgroup rawsex rawgrflc
...59FUeda AiJPNFPRO...JPNFPROMF
...50FZemanova LenkaCZEFPRO...CZEFPROMF
...83FSpearing KyleighUSAFPRO...USAFPROMF
...63FAbysova IrinaRUSFPRO...RUSFPROMF
...57FKnapp AnjaDEUFPRO...GERFPROMF
...68MMatthews AndrewGBRM30-34...GBRM30-34FM
...46FRappaport SummerUSAFPRO...USAFPROMF
...60FReid AileenIRLFPRO...IRLFPROMF
...142FMcdowall EdwinaGBRF45-49...GBRF45-49F
...141MO'Bray LukeGBRM30-34...GBRM30-34M


ar[(ar['sex'] == '')&(ar['name'] != '')]

рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ! рдареАрдХ рд╣реИ, рд╕рдореВрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рдорд╣рд┐рд▓рд╛ рд╣реИред рдПрдорд┐рд▓реА рдПрдХ рдорд╣рд┐рд▓рд╛ рдирд╛рдо рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдкреНрд░рддрд┐рднрд╛рдЧреА (рдпрд╛ рдЙрд╕рдХрд╛ рдирд╛рдо) рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЙрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд▓рд┐рдВрдЧ рдФрд░ рд╕рдореВрд╣ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ * рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред
eventplacesexnamecountrygroup...country rawgroup rawsex rawgrflc
London Triathlon Olympic 2019672Stather EmilyGBR...GBRunknownU


eventplacesexnamecountrygroup...country rawgroup rawsex rawgrflc
Ironman Staffordshire 70.3 20181859FStather EmilyGBRF40-44...GBRF40-44FF



ar.loc[arns.index, 'sex'] = 'F'

рдЕрдм рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣реИрдВред

* рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдРрд╕рд╛ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИ - рдмрд╛рд░-рдмрд╛рд░ рд░рди рдХреЗ рд╕рд╛рде, рдпрджрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреБрдЫ рдкрд╣рд▓реЗ рдмрджрд▓рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ, рддреЛ рд▓рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдорд╣рд┐рд▓рд╛ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд╛рдо рдФрд░ рд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рддрд░реНрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд╕реА рджреЗрд╢ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╛, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░реНрдХ рдореЗрдВ рдПрдХ рдЬрд╛рдВрдЪ рдЬреЛрдбрд╝реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдирд╛рдо рдРрд╕рд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдВ рдЬреЛ рдкреВрд░реЗ рд▓реИрдкрдЯреЙрдк рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛, рдЖрдк рдпреЛрдЬрдирд╛ рд╕реЗ рд╡рд┐рдЪрд▓рди рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

if len(arns) == 1 and arns['name'].iloc[0] == 'Stather Emily':
    ar.loc[arns.index, 'sex'] = 'F'
else:
    raise Exception('Different scenario!')

рдРрд╕рд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╢рд╛рдВрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реБрдзрд╛рд░ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ рдХрд┐ рд╕рдореВрд╣ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рд╣рдореЗрд╢рд╛ред рд▓рдЧрднрдЧред рдлрд┐рд░ рднреА, рдХрдИ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдЧрд▓рддреА рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЕрдм рдЪрд▓реЛ рдЙрди рд╕рднреА рдХреЛ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдереНрдп рдерд╛ рдХрд┐ рд▓рд┐рдВрдЧ рдиреЗ рдкреБрд░реБрд╖ рдФрд░ рдорд╣рд┐рд▓рд╛ рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд╛рдо рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рдерд╛ред

рдкреБрд░реБрд╖ рдФрд░ рдорд╣рд┐рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рдкрд░ рд╕рднреА рдирд╛рдо рдЦреЛрдЬреЗрдВред рдпрд╣рд╛рдВ, рдирд╛рдо рдХреЛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдкреВрд░рд╛ рдирд╛рдо, рдпрд╛рдиреА рдмрд┐рдирд╛ рдЙрдкрдирд╛рдо рдХреЗ, рдЬрд┐рд╕реЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкрд╣рд▓рд╛ рдирд╛рдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред

ar['fn'] = ar['name'].str.split().str[-1] #fn тАУ first name
mfn = list(ar[ar['sex'] == 'M']['fn'].unique()) #mfn тАУ male first names

рдХреБрд▓ 32,508 рдкреБрд░реБрд╖ рдирд╛рдо рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред рдпрд╣рд╛рдВ 50 рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ:
['Michael', 'David', 'Thomas', 'John', 'Daniel', 'Mark', 'Peter', 'Paul', 'Christian', 'Robert', 'Martin', 'James', 'Andrew', 'Chris', 'Richard', 'Andreas', 'Matthew', 'Brian', 'Kevin', 'Patrick', 'Scott', 'Stefan', 'Jason', 'Eric', 'Alexander', 'Christopher', 'Simon', 'Mike', 'Tim', 'Frank', 'Stephen', 'Steve', 'Jonathan', 'Marco', 'Markus', 'Adam', 'Ryan', 'Tom', 'Jan', 'Marc', 'Carlos', 'Matt', 'Steven', 'Jeff', 'Sergey', 'William', 'Aleksandr', 'Andrey', 'Benjamin', 'Jose']


ffn = list(ar[ar['sex'] == 'F']['fn'].unique()) #ffn тАУ female first names

рдХрдо рдорд╣рд┐рд▓рд╛рдПрдВ - 14 423. рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп: рдЕрдЪреНрдЫрд╛, рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЪреМрд░рд╛рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
['Jennifer', 'Sarah', 'Laura', 'Lisa', 'Anna', 'Michelle', 'Maria', 'Andrea', 'Nicole', 'Jessica', 'Julie', 'Elizabeth', 'Stephanie', 'Karen', 'Christine', 'Amy', 'Rebecca', 'Susan', 'Rachel', 'Anne', 'Heather', 'Kelly', 'Barbara', 'Claudia', 'Amanda', 'Sandra', 'Julia', 'Lauren', 'Melissa', 'Emma', 'Sara', 'Katie', 'Melanie', 'Kim', 'Caroline', 'Erin', 'Kate', 'Linda', 'Mary', 'Alexandra', 'Christina', 'Emily', 'Angela', 'Catherine', 'Claire', 'Elena', 'Patricia', 'Charlotte', 'Megan', 'Daniela']



mffn = set(mfn).intersection(ffn) #mffn тАУ male-female first names

рд╡рд╣рд╛рдБ рд╣реИред рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ 2,811 рд╣реИрдВред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦреЗрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рддрдиреЗ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ:

armfn = ar[ar['fn'].isin(mffn)] #armfn тАУ all records with male-female names

725 562 рд╣реИрдВред рдпрд╣ рдЖрдзрд╛ рд╣реИ! рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ! рд▓рдЧрднрдЧ 37,000 рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдзреЗ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдХреБрд▓ 2,800 рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпреЗ рдирд╛рдо рдХреНрдпрд╛ рд╣реИрдВ, рдЬреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рдпреЗ рдирд╛рдо рд╕реВрдЪрдХ рд╣реЛрдВрдЧреЗ:

df = pd.DataFrame(armfn['fn'].value_counts())
df = df.rename(columns={'fn':'total'})

рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рдХрд┐рддрдиреЗ рдкреБрд░реБрд╖ рдФрд░ рдорд╣рд┐рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВред

df['M'] = armfn[armfn['sex'] == 'M']['fn'].value_counts()
df['F'] = armfn[armfn['sex'] == 'F']['fn'].value_counts()

totalMF
Michael206482063810
David18493184858
Thomas12746127406
John11634116322
Daniel11045110414
Mark10968109653
Peter10692106911
Paul961696142
Christian886388594
Robert866686642
............
рддреЛ ... рдпрд╣ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпреЗ рд╕рднреА рдирд╛рдо рдкреБрд▓реНрд▓рд┐рдВрдЧ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рдорд╣рд┐рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рдХреА рдХреБрдЫ рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рд╣реИред рдпреЗ рд╕рдВрднрд╡рддрдГ рдбреЗрдЯрд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред

рдЖрдЗрдП рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдорд╣рд┐рд▓рд╛ рдирд╛рдореЛрдВ рдкрд░ред

df.sort_values(by = 'F', ascending=False)

totalMF
Jennifer365233649
Sarah328843284
Laura263632633
Lisa261822616
Anna2563102553
Michelle237312372
Maria25553862169
Andrea432322352088
Nicole202562019
Julie193821936
............
рд╡рд╣реАред рд▓рдЧрднрдЧред рдПрдВрдбреНрд░рд┐рдпрд╛ , рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ androgynous рдирд╛рдо рд╣реИ, рдФрд░ рдорд╛рд░рд┐рдпрд╛ рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рд╣реИ , рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдЦрдбрд╝реЗ рд╣реЛ рдЬрд╛рдУ ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рдо рдмрд╣реБрдд рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреЗрд╢реЛрдВ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рд╢реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреЛрдИ рднреА рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХреГрддрд┐рдпреЛрдВ рдореЗрдВ, рдПрдХ рд╣реА рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдХрд░реЗрди рд╣рдорд╛рд░реА рд╕реВрдЪреА рдореЗрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдорд╣рд┐рд▓рд╛ рдирд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл рдХрд░реЗрди рдирд╛рдо рд╣реИ , рдЬреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреБрд░реБрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд┐рд╢реНрд╡ рдЬреНрдЮрд╛рди рдХреЛ рдзрд╛рд░рдг рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд▓рд┐рдВрдЧ-рдЕрдиреБрдорд╛рдирдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

import gender_guesser.detector as gg

d = gg.Detector()
d.get_gender(u'Oleg')

Out: 'male'


d.get_gender(u'Evgeniya')

Out: 'female'

рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдПрдВрдбреНрд░рд┐рдпрд╛ рдирд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рд╡рд╣ рдорд╣рд┐рд▓рд╛ рдХреЛ рднреА рдмрд╛рд╣рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ , рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рд╕рдЪ рд╣реИ, рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдбрд┐рдЯреЗрдХреНрдЯрд░ рдХреА рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ , рддреЛ рд╕рднреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╡рд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред

d.names['Andrea']

Out: {'female': ' 4 4 3 4788 64 579 34 1 7 ',
'mostly_female': '5 6 7 ',
'male': ' 7 '}

рд╣рд╛рдБ, рдпрд╣ рд╣реИ рдХрд┐ get_gender рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдп рдирд╛рдореЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

d.names['Maria']

Out: {'female': '686 6 A 85986 A BA 3B98A75457 6 ',
'mostly_female': ' BBC A 678A9 '}


d.names['Oleg']

Out: {'male': ' 6 2 99894737 3 '}

рдпрд╣реА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╡рд╛рд▓реЗ рдЬреЛрдбрд╝реЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА - рдпрд╣ рд╕реЗрдХреНрд╕ рд╣реИ: рдкреБрд░реБрд╖, рдлреЗрдореЗрд▓реЗ, рдЬреНрдпрд╛рджрд╛рддрд░_рдореИрд▓, рдЬреНрдпрд╛рджрд╛рддрд░_рдлреНрд▓реЗрдмреА, рдПрдВрдбреА , рдФрд░ рдореВрд▓реНрдп - рд╕рдВрдмрдВрдзрд┐рдд рджреЗрд╢ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА: 1,2,3 ... .. 9ABC ред рджреЗрд╢ рд╣реИрдВ:

d.COUNTRIES

Out: ['great_britain', 'ireland', 'usa', 'italy', 'malta', 'portugal', 'spain', 'france', 'belgium', 'luxembourg', 'the_netherlands', 'east_frisia', 'germany', 'austria', 'swiss', 'iceland', 'denmark', 'norway', 'sweden', 'finland', 'estonia', 'latvia', 'lithuania', 'poland', 'czech_republic', 'slovakia', 'hungary', 'romania', 'bulgaria', 'bosniaand', 'croatia', 'kosovo', 'macedonia', 'montenegro', 'serbia', 'slovenia', 'albania', 'greece', 'russia', 'belarus', 'moldova', 'ukraine', 'armenia', 'azerbaijan', 'georgia', 'the_stans', 'turkey', 'arabia', 'israel', 'china', 'india', 'japan', 'korea', 'vietnam', 'other_countries']

рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реВрдЪреА рдореЗрдВ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рдЕрд░реНрде рдпрд╛ рдЙрдирдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЙрди рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬрд┐рдирдХреА рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рд╣реИ рдФрд░ рдХреБрдВрдЬреА рдкреБрд░реБрд╖ рдпрд╛ рдорд╣рд┐рд▓рд╛ рд╣реИ ред рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдЧ-рдЕрдиреБрдорд╛рдирдХ рдХреА рдЕрдкрдиреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд▓рд┐рдЦреЗрдВ :

df['sex from gg'] = ''

for n in df.index:
    if n in list(d.names.keys()):
        options = list(d.names[n].keys())
        if len(options) == 1 and options[0] == 'male':
            df.loc[n, 'sex from gg'] = 'M'
        if len(options) == 1 and options[0] == 'female':
            df.loc[n, 'sex from gg'] = 'F'

рдпрд╣ 1,150 рдирд╛рдореЛрдВ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ: рдареАрдХ рд╣реИ, рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдЕрдм рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╕рднреА рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
totalMFsex from gg
Michael206482063810M
David18493184858M
Thomas12746127406M
John11634116322M
Daniel11045110414M
Mark10968109653M
Peter10692106911M
Paul961696142M
Christian886388594
Robert866686642M

totalMFsex from gg
Jennifer365233649F
Sarah328843284F
Laura263632633F
Lisa261822616F
Anna2563102553F
Michelle237312372F
Maria25553862169
Andrea432322352088
Nicole202562019F
Julie193821936


all_names = ar['fn'].unique()

male_names = []
female_names = []

for n in all_names:
    if n in list(d.names.keys()):
        options = list(d.names[n].keys())
        if len(options) == 1:
            if options[0] == 'male':
                male_names.append(n)
            if options[0] == 'female':
                female_names.append(n)

рдорд┐рд▓рд╛ 7 091 рдкреБрд░реБрд╖ рдирд╛рдо рдФрд░ 5 054 рдорд╣рд┐рд▓рд╛ред рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

tofixm = ar[ar['fn'].isin(male_names)]
ar.loc[tofixm.index, 'sex'] = 'M'
tofixf = ar[ar['fn'].isin(female_names)]
ar.loc[tofixf.index, 'sex'] = 'F'

рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

ar[ar['sex']!=ar['sex raw']]

рд╕рд╣реА 30,352 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ (рд╕рдореВрд╣ рдХреЗ рдирд╛рдо рд╕реЗ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде)ред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, 10 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд╛рд▓реЗ: рдЕрдм рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдордиреЗ рд▓рд┐рдВрдЧ рдХреА рд╕рд╣реА рдкрд╣рдЪрд╛рди рдХрд░ рд▓реА рд╣реИ, рд╣рдо рдорд╛рдирдХ рд╕рдореВрд╣реЛрдВ рдХреЛ рднреА рд▓рд╛рдЗрди рдореЗрдВ рд▓рд╛рдПрдВрдЧреЗред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗ рдХрд╣рд╛рдВ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ:
eventplacesexnamecountrygroup...country rawgroup rawsex rawgrflc
...37FPilz ChristianeDEUFPRO...GERFPROMF
...92FBrault Sarah-AnneCANFPRO...CANFPROMF
...96FMurphy SusannaIRLFPRO...IRLFPROMF
...105FSpoelder RomyNLD...NEDFJUNIORMF
...424MWatson TomGBRM40-44...GBRM40-44FM
...81FMorel CharlotteFRA...FRAFJUNIORMF
...65FSelekhova OlgaRUS...RUSFU23MF
...166FKeat RebekahAUS...AUSFJUNIORMF
...119FEim NinaDEU...GERFQUALтАжMF
...73FSukhoruchenkova EvgeniaRUSFPRO...RUSFPROMF


ar['gfl'] = ar['group'].str[0]
gncws = ar[(ar['sex'] != ar['gfl']) & (ar['group']!='')]

4,248 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБред рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рдмрджрд▓реЗрдВ:

ar.loc[gncws.index, 'group'] = ar.loc[gncws.index, 'sex'] + ar.loc[gncws.index, 'group'].str[1:].index, 'sex']

eventplacesexnamecountrygroup...country rawgroup rawsex raw
...803FKenney JoelleUSAF35-39...USAM35-39M
...1432MHolmberg Henriette GormDNKM45-49...DENF45-49F
...503MTai Oy LeenMYSM40-44...MASF40-44F
...236FDissanayake ArunaLKAF25-29...SRIM25-29M
...1349FDelos Reyes Joshua RafaellePHLF18-24...PHIM18-24M
...543FVandekendelaere JaniqueBELF50-54...BELM50-54M
...1029MProvost ShaunUSAM25-29...USAF25-29F
...303FTorrens Vadell MaciaESPF30-34...ESPM30-34M
...1338FSuarez RenanBOLF35-39...BOLM35-39M
...502FEverlo LindaNLDF30-34...NEDM30-34M
рд╢рд╛рдпрдж, рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╕реБрдзрд╛рд░ рдЧрд▓рдд рд╣реЛ рдЧрдП, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдЬрд▓реНрджреА рд╕реЛрдЪрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ред рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдпрд╣ рд╕реЗрдХреНрд╕ рдХреА рдмрд╣рд╛рд▓реА рдХреЗ рд╕рд╛рде рд╣реИред рд╣рдо рдХрд╛рд░реНрдпрд╢реАрд▓ рдХреЙрд▓рдо рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред

pkl.dump(rd, open(r'D:\tri\details8.pkl', 'wb'))

рдЕрдзреВрд░рд╛ рдбреЗрдЯрд╛ рдХреА рд╡рд╕реВрд▓реА рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдм рд╣реИред

рдмреБрд▓реЗрдЯрд┐рди рдЕрдкрдбреЗрдЯ


рдпрд╣ рдкреБрд░реБрд╖реЛрдВ рдФрд░ рдорд╣рд┐рд▓рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЖрджрд┐ рдкрд░ рдЕрджреНрдпрддрди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

rs['total raw'] = rs['total']
rs['males raw'] = rs['males']
rs['females raw'] = rs['females']
rs['rus raw'] = rs['rus']

for i in rs.index:
    e = rs.loc[i,'event']
    rs.loc[i,'total'] = len(rd[e])
    rs.loc[i,'males'] = len(rd[e][rd[e]['sex'] == 'M'])
    rs.loc[i,'females'] = len(rd[e][rd[e]['sex'] == 'F'])
    rs.loc[i,'rus'] = len(rd[e][rd[e]['country'] == 'RUS'])

len(rs[rs['total'] != rs['total raw']])

Out: 288


len(rs[rs['males'] != rs['males raw']])

Out:962


len(rs[rs['females'] != rs['females raw']])

Out: 836


len(rs[rs['rus'] != rs['rus raw']])

Out: 8


pkl.dump(rs, open(r'D:\tri\summary6.pkl', 'wb'))

рднрд╛рдЧ 4. рдирдореВрдирд╛


рдЕрдм рдЯреНрд░рд╛рдпрдерд▓реЙрди рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред рд╕реАрдЬрд╝рди рдХреЗ рджреМрд░рд╛рди, рдХрдИ рдЦреБрд▓реА рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдерд▓реАрдЯ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдореЗрдЪреНрдпреЛрд░, рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред рдкрд░ рд╣рдореЗрд╢рд╛ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛ред 1990 рдХреЗ рдмрд╛рдж рд╕реЗ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВред Tristats.ru рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджреМрдбрд╝реЗрдВ рд╣реИрдВ, рдФрд░ рдкрд╣рд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдм рдЬрдм рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдФрд░ рдХрд░реАрдм рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рджрд╕ рд╕рд╛рд▓ рдХреА рдЕрд╡рдзрд┐


рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрд╖ рдореЗрдВ рджреМрдбрд╝ рдФрд░ рдлрд┐рдирд┐рд╢рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ:

rs['year'] = pd.DatetimeIndex(rs['date']).year
years = range(rs['year'].min(),rs['year'].max())
rsy = pd.DataFrame(columns = ['races', 'finishers', 'rus', 'RUS'], index = years) #rsy тАУ races summary by year

for y in rsy.index:
    rsy.loc[y,'races'] = len(rs[rs['year'] == y])
    rsy.loc[y,'finishers'] = sum(rs[rs['year'] == y]['total'])
    rsy.loc[y,'rus'] =  sum(rs[rs['year'] == y]['rus'])
    rsy.loc[y,'RUS'] = len(rs[(rs['year'] == y)&(rs['country'] == 'RUS')])

yearracesfinishersrusRUS
1990128650
19910000
1992131730
1993288730
1994212830
1995373170
1996377660
19973403110
19984583210
1999101106260
2000101231290
2001111992320
20022122491000
20033031521580
20041954881281
20051630242441
20062962103691
200744121534441
200843138303691
200949270474781
201047265283661
201177454128485
2012967559010554
2013988661721659
2014135138018318811
2015164172375484615
2016192178630754127
2017238185473882542
20182782030311095454
20192932209011335459
RUS - рд░реВрд╕ рдореЗрдВ рджреМрдбрд╝ред rus - рд░реВрд╕ рд╕реЗ рдлрд┐рдирд┐рд╢рд░ред

рдпрд╣рд╛рдБ рдпрд╣ рдПрдХ рдЪрд╛рд░реНрдЯ рдкрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:


рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрд╡рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рджреМрдбрд╝ рдФрд░ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗрд╡рд▓ рдЕрд╕рдВрдЧрдд рд╣реИред 2011 рдореЗрдВ рджреМрдбрд╝ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рдЬрдмрдХрд┐ рд░реВрд╕ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ 2009 рдореЗрдВ рд╡рд╛рдкрд╕ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдмрдврд╝реА рд╣реБрдИ рд░реБрдЪрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдорд╛рдВрдЧ рдореЗрдВ рд╡реГрджреНрдзрд┐, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рджреЛ рд╕рд╛рд▓ рдмрд╛рдж рдЖрдкреВрд░реНрддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИ, рдЕрд░реНрдерд╛рддреН рд╢реБрд░реВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдбреЗрдЯрд╛ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ, рдФрд░ рд╕рдВрднрд╡рддрдГ рдХрдИ рджреМрдбрд╝ рдЧрд╛рдпрдм рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗрд╡рд▓ 2010 рдореЗрдВ рд╢реБрд░реВ рд╣реБрдИ рдереА, рдЬреЛ рдЗрд╕ рдХреНрд╖рдг рдореЗрдВ рдЧреНрд░рд╛рдл рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЫрд▓рд╛рдВрдЧ рднреА рд╕рдордЭрд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ 10 рд╕рд╛рд▓ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рд╣реИ,рдХрдИ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЯреНрд░реЗрдВрдб рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдмрдХрд┐ рд╡рд╣рд╛рдВ рди рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрдо, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ 90 рдХреЗ рджрд╢рдХ рдФрд░ 2000 рдХреЗ рджрд╢рдХ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкреЗрд╢реЗрд╡рд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдПрдВред

rs = rs[(rs['year']>=2010)&(rs['year']<= 2019)]



рдЪрдпрдирд┐рдд рдЕрд╡рдзрд┐ рдореЗрдВ, 84% рджреМрдбрд╝ рдФрд░ 94% рдлрд┐рдирд┐рд╢рд░реНрд╕ рдЧрд┐рд░ рдЧрдПред

рдПрдореЗрдЪреНрдпреЛрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ


рдЗрд╕рд▓рд┐рдП, рдЪрдпрдирд┐рдд рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рд╢реМрдХрд┐рдпрд╛ рдПрдерд▓реАрдЯ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирд╕реЗ рдЕрдЪреНрдЫреЗ рдЖрдБрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░реБрдЪрд┐ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЦреБрдж рдЗрд╕ рддрд░рд╣ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕реНрддрд░ рдореЗрдВ рдпрд╣ рдУрд▓рдВрдкрд┐рдХ рдЪреИрдВрдкрд┐рдпрди рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреЗрд╢реЗрд╡рд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдПрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рдЕрд╡рдзрд┐ рдореЗрдВ рд╣реБрдИрдВред рд╢реМрдХрд┐рдпрд╛ рдФрд░ рдкреЗрд╢реЗрд╡рд░ рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЛ рдорд┐рд╢реНрд░рдг рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдирдХреА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ? рдЧрддрд┐ рд╕реЗред рд╣рдо рдЙрдирдХрд╛ рд╣рд┐рд╕рд╛рдм рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджреМрдбрд╝ рдкрд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рджреВрд░реА рд╣реИ - рд╕реНрдкреНрд░рд┐рдВрдЯ, рдУрд▓рдВрдкрд┐рдХ, рдЖрдзрд╛, рд▓реЛрд╣рд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рдЪрд░рдгреЛрдВ рдХрд╛ рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рддреИрд░рд╛рдХреА, рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рдирд╛ рдФрд░ рджреМрдбрд╝рдирд╛ред рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЯ рдХреЗ рд▓рд┐рдП 0.75 + 20 + 5, рдУрд▓рдВрдкрд┐рдХ рдХреЗ рд▓рд┐рдП 1.5 + 40 + 10, рд╣рд╛рдл рдФрд░ 3 рдХреЗ рд▓рд┐рдП 1.9 + 90 + 21.1 рд╣реИредрд▓реЛрд╣реЗ рдХреЗ рд▓рд┐рдП 8 + 180 + 42.2ред рдмреЗрд╢рдХ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рджреМрдбрд╝ рд╕реЗ рдЬрд╛рддрд┐ рдореЗрдВ рднрд┐рдиреНрди рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рддрд┐рд╢рдд рддрдХ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдЯреАрдХ рдерд╛ред

rs['km'] = ''

rs.loc[rs['dist'] == 'sprint', 'km'] = 0.75+20+5
rs.loc[rs['dist'] == 'olympic', 'km'] = 1.5+40+10
rs.loc[rs['dist'] == 'half', 'km'] = 1.9+90+21.1
rs.loc[rs['dist'] == 'full', 'km'] = 3.8+180+42.2

рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдФрд░ рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЕрдзрд┐рдХрддрдо рдЙрд╕ рдПрдерд▓реАрдЯ рдХреА рдФрд╕рдд рдЧрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдкрд╣рд▓рд╛ рд╕реНрдерд╛рди рдЬреАрддрд╛ рдерд╛ред

for index, row in rs.iterrows():
    e = row['event']
    rd[e]['th'] = pd.TimedeltaIndex(rd[e]['result']).seconds/3600
    rd[e]['v'] = rs.loc[i, 'km'] / rd[e]['th']

for index, row in rs.iterrows():
    e = row['event']
    rs.loc[index,'vmax'] = rd[e]['v'].max()
    rs.loc[index,'vavg'] = rd[e]['v'].mean()



рдареАрдХ рд╣реИ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓рдЧрднрдЧ 15 рдХрд┐рдореА / рдШрдВрдЯрд╛ рдФрд░ 30 рдХрд┐рдореА / рдШрдВрдЯрд╛ рдХреЗ рдмреАрдЪ рдвреЗрд░ рдореЗрдВ рдЧрддрд┐ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЗрдХрдЯреНрдард╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ "рдмреНрд░рд╣реНрдорд╛рдВрдбреАрдп" рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдФрд╕рдд рдЧрддрд┐ рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рд╣реИрдВ:

rs = rs.sort_values(by='vavg')



рдпрд╣рд╛рдВ рд╣рдордиреЗ рдкреИрдорд╛рдирд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рд╣рдо рд╕реАрдорд╛ рдХрд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд╕рдд рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рдЧрднрдЧ 17 рдХрд┐рдореА / рдШрдВрдЯрд╛ рд╕реЗ 27 рдХрд┐рдореА / рдШрдВрдЯрд╛, рдЕрдзрд┐рдХрддрдо рдХреЗ рд▓рд┐рдП - 18 рдХрд┐рдореА / рдШрдВрдЯрд╛ рд╕реЗ 32 рдХрд┐рдореА / рдШрдВрдЯрд╛ рддрдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмрд╣реБрдд рдХрдо рдФрд░ рдмрд╣реБрдд рдЙрдЪреНрдЪ рдФрд╕рдд рдЧрддрд┐ рдХреЗ рд╕рд╛рде "рдкреВрдВрдЫ" рд╣реИрдВред рдХрдо рдЧрддрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ , рдЬреИрд╕реЗ рдиреЛрд░реНрд╢рдореИрди рдЬреИрд╕реА рдЪрд░рдо рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк , рдФрд░ рдЙрдЪреНрдЪ рдЧрддрд┐ рд░рджреНрдж рддреИрд░рд╛рдХреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд╣рд╛рдВ рд╕реНрдкреНрд░рд┐рдВрдЯ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реБрдкрд░ рд╕реНрдкреНрд░рд┐рдВрдЯ, рдпрд╛ рдмрд╕ рдЧрд▓рдд рдбреЗрдЯрд╛ рдерд╛ред рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде 1200 рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЪрд┐рдХрдиреА рдХрджрдо рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреА рдФрд╕рдд рдЧрддрд┐ рдХреЗ рдЙрдЪреНрдЪ рдореВрд▓реНрдпред рд╡рд╣рд╛рдВ рдЖрдк рдЧреНрд░рд╛рдл рдХреЗ рдкрд╣рд▓реЗ рджреЛ-рддрд┐рд╣рд╛рдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдФрд╕рдд рдФрд░ рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдХреЗ рдмреАрдЪ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рдкреЗрд╢реЗрд╡рд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднреЗрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдФрд╕рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдХреЗ рдЕрдиреБрдкрд╛рдд рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдкреЗрд╢реЗрд╡рд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдХреЛрдИ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓реЛрдЧ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдкрд╛рд╕ рд╢рд╛рд░реАрд░рд┐рдХ рдлрд┐рдЯрдиреЗрд╕ рдХрд╛ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЕрдиреБрдкрд╛рдд рдиреНрдпреВрдирддрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

rs['vmdbva'] = rs['vmax']/rs['vavg'] #vmdbva - v max divided by v avg
rs = rs.sort_values(by='vmdbva')



рдЗрд╕ рдЧреНрд░рд╛рдл рдкрд░, рдкрд╣рд▓реА рддрд┐рдорд╛рд╣реА рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИ: рдФрд╕рдд рд╕реЗ рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдХрд╛ рдЕрдиреБрдкрд╛рдд рдЫреЛрдЯрд╛, рдЙрдЪреНрдЪ рдФрд╕рдд рдЧрддрд┐, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреЗрд╢реЗрд╡рд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╣реИред рд╣рд░реЗ рд░рдВрдЧ рдХреА рд╡рдХреНрд░ рдкрд░ рдХрджрдо рд▓рдЧрднрдЧ 1.2 рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдирдореВрдиреЗ рдореЗрдВ рдХреЗрд╡рд▓ 1.2 рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдкрд╛рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

rs = rs[rs['vmdbva'] > 1.2]

рд╣рдо atypical рдХрдо рдФрд░ рдЙрдЪреНрдЪ рдЧрддрд┐ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рднреА рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рджреВрд░реА рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдЗрдерд▓реЙрди "рд╡рд┐рд╢реНрд╡ рд░рд┐рдХреЙрд░реНрдб" рдХрд░ рд░рд╣реЗ рд╣реИрдВ? 2019 рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреВрд░реА рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рд╕рдордп рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдордзреНрдпрдо рдЧрддрд┐ рд╕реЗ рдЧрд┐рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рддреЗрдЬ 33 рдХрд┐рдореА / рдШрдВрдЯрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рд╣рдо рдЙрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рдФрд╕рдд рдЧрддрд┐ рдЕрдзрд┐рдХ рд╣реИ, рдЕрдорд╛рдиреНрдп рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред

rs = rs[(rs['vavg'] > 17)&(rs['vmax'] < 33)]

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд░рд╣рддрд╛ рд╣реИ:



рдЕрдм рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рдЬрд╛рддреАрдп рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рднреА рдЪрдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдордиреЗ 1922 рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ 777, рдпрд╛ 40% рдЦреЛ рджрд┐рдпрд╛ред рдЗрд╕реА рд╕рдордп, рдлрд┐рдирд┐рд╢рд░реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдЗрддрдиреА рдХрдо рдирд╣реАрдВ рд╣реБрдИ - рдХреЗрд╡рд▓ 13% рддрдХред

рдЗрд╕рд▓рд┐рдП, 1,231,772 рдлрд┐рдирд┐рд╢рд░реЛрдВ рдХреЗ рд╕рд╛рде 1,145 рджреМрдбрд╝ рдмрд╛рдХреА рд╣реИрдВред рдпрд╣ рдирдореВрдирд╛ рдореЗрд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдмрди рдЧрдпрд╛ред

рднрд╛рдЧ 5. рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рджреГрд╢реНрдп


рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЙрдЪрд┐рдд рд╕рд░рд▓рддрдо рднрд╛рдЧ рдереЗред рд╣рд┐рдорд╢реИрд▓ рдХреА рдиреЛрдХ, рдкрд╛рдиреА рдХреЗ рдиреАрдЪреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рд┐рд░реНрдл рдбреЗрдЯрд╛ рдХреА рддреИрдпрд╛рд░реА рдереАред рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╛рдВрдбрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдСрдкрд░реЗрд╢рди рдерд╛, рдЬреЛ рдФрд╕рдд, рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рд╕рдм рдкреНрд░рд╛рдердорд┐рдХ рдкрд╛рдВрдбрд╛ рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдорд╛рдирдХ matplotlib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЦреЗрддреЛрдВ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рдЬрд┐рд╢, рдмрд╛рд░, рдкрд╛рдИ ред рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рддрд╛рд░реАрдЦреЛрдВ рдФрд░ рдЪрд┐рддреНрд░рд▓реЗрдЦреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдЯрд┐рдВрдХрд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрд┐рдпреЛрдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ред рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдирд╣реАрдВ рд╣реИmatplotlib ред

geodata


рдкреНрд░рддреНрдпреЗрдХ рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрдерд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЬрд┐рдпреЛрдлрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХреАред рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рддрд┐рд╡рд░реНрд╖ рдХрдИ рджреМрдбрд╝ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдореЗрдВ geodata рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд╕рд╛рди рдЙрдкрдХрд░рдг рдЕрдЬрдЧрд░ рд╣реИ folium ред рдпрд╣рд╛рдВ рджреЗрдЦрд┐рдП рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
eventdatecountrylatitudelongitudelocтАж
0Ironman Indian Wells La Quinta 70.3 20192019-12-08USA33.7238-116.305Indian Wells/La Quinta, California, USAтАж
1Ironman Taupo 70.3 20192019-12-07NZL-41.5001172.834New ZealandтАж
2Ironman Western Australia 20192019-12-01AUS-33.6445115.349Busselton, Western AustraliaтАж
3Ironman Mar del Plata 20192019-12-01ARG-37.9977-57.5483Mar del Plata, ArgentinaтАж
4Ironman Cozumel 20192019-11-24MEX20.4318-86.9203Cozumel, MexicoтАж
5Ironman Arizona 20192019-11-24USA33.4255-111.94Tempe, Arizona, USAтАж
6Ironman Xiamen 70.3 20192019-11-10CHN24.4758118.075Xiamen, ChinaтАж
7Ironman Turkey 70.3 20192019-11-03TUR36.863331.0578Belek, Antalya, TurkeyтАж
8Ironman Florida 20192019-11-02USA30.1766-85.8055Panama City Beach, Florida, USAтАж
9Ironman Marrakech 70.3 20192019-10-27MAR31.6258-7.98916Marrakech, MoroccoтАж
10Ironman Waco 70.3 20192019-10-27USA31.5493-97.1467Waco, Texas, USAтАж


import folium

m = folium.Map() 
folium.Marker(['55.7522200', '37.6155600'], popup='').add_to(m)

рдФрд░ рд╣рдореЗрдВ рдмреГрд╣рд╕реНрдкрддрд┐ рд▓реИрдкрдЯреЙрдк рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдорд╛рдирдЪрд┐рддреНрд░ рдорд┐рд▓рддрд╛ рд╣реИред



рдЕрдм, рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдПрдХ рдирдпрд╛ рдХреЙрд▓рдо рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ:

rs['coords'] = rs['latitude'].astype(str) + ', ' + rs['longitude'].astype(str)

рдХреА рдЕрдиреВрдареА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ coords 291. рд╣реИрдВ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд▓ loc 324, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреБрдЫ рдирд╛рдо рдереЛрдбрд╝рд╛ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡реЗ рдПрдХ рд╣реА рдмрд┐рдВрджреБ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╕рдордиреНрд╡рдпрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ ред рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдореЗрдВ (рдЕрджреНрд╡рд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде) рдкреВрд░реЗ рд╕рдордп рдореЗрдВ рдХрд┐рддрдиреЗ рдЖрдпреЛрдЬрди рд╣реБрдП рд╣реИрдВ:

vc = rs['coords'].value_counts()

vc

Out:
43.7009358, 7.2683912 22
43.5854823, 39.723109 20
29.03970805, -13.636291 16
47.3723941, 8.5423328 16
59.3110918, 24.420907 15
51.0834196, 10.4234469 15
54.7585694, 38.8818137 14
20.4317585, -86.9202745 13
52.3727598, 4.8936041 12
41.6132925, 2.6576102 12
... ...

рдЕрдм рдПрдХ рдирдХреНрд╢рд╛ рдмрдирд╛рдПрдВ, рдФрд░ рд╕рд░реНрдХрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕ рдкрд░ рдорд╛рд░реНрдХрд░ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХрд╛ рддреНрд░рд┐рдЬреНрдпрд╛ рд╕реНрдерд╛рди рдкрд░ рдЖрдпреЛрдЬрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдорд╛рд░реНрдХрд░ рдЬреЛрдбрд╝реЗрдВред

m = folium.Map(location=[25,10], zoom_start=2)

for c in rs['coords'].unique():
    row = [r[1] for r in rs.iterrows() if r[1]['coords'] == c][0]    
    folium.Circle([row['latitude'], row['longitude']], 
					popup=(row['location']+'\n('+str(vc[c])+' races)'), 
					radius = 10000*int(vc[c]), 
					color='darkorange', 
					fill=True, 
					stroke=True, 
					weight=1).add_to(m)

рдХрд┐рдпрд╛ рд╣реБрдЖред рдЖрдк рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:



рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рдкреНрд░рдЧрддрд┐


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдФрд░ рдЕрдиреБрд╕реВрдЪреА рдкрд░ рдХрд╛рдо рднреА рдЧреИрд░-рддреБрдЪреНрдЫ рдерд╛ред рдпрд╣ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХрд╛ рдирд╡реАрдирддрдо рдкреНрд░рдЧрддрд┐ рдЧреНрд░рд╛рдл рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:



рдЪрд▓реЛ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реА рд╕рдордп рдореИрдВ рдореИрдЯрд▓рдкреЛрдЯрд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреВрдВрдЧрд╛ :

fig = plt.figure()
fig.set_size_inches(10, 6)

ax = fig.add_axes([0,0,1,1])

b = ax.bar(exp,numrecs, color = 'navajowhite')

ax1 = ax.twinx()

for i in range(len(exp_samp)):
    ax1.plot(exp_samp[i], vproc_samp[i], '.')
	
p, = ax1.plot(exp, vpm, 'o-',markersize=8, linewidth=2, color='C0')

for i in range(len(exp)):
    if i < len(exp)-1 and (vpm[i] < vpm[i+1]):
        ax1.text(x = exp[i]+0.1, y = vpm[i]-0.2, s = '{0:3.1f}%'.format(vpm[i]),size=12)
    else:
        ax1.text(x = exp[i]+0.1, y = vpm[i]+0.1, s = '{0:3.1f}%'.format(vpm[i]),size=12)

ax.legend((b,p), (' ', ''),loc='center right')
ax.set_xlabel('   ')
ax.set_ylabel('')
ax1.set_ylabel('%     ')
ax.set_xticks(np.arange(1, 11, step=1))
ax.set_yticks(np.arange(0, 230000, step=25000))
ax1.set_ylim(97.5,103.5)
ax.yaxis.set_label_position("right")
ax.yaxis.tick_right()
ax1.yaxis.set_label_position("left")
ax1.yaxis.tick_left()      

plt.show()

рдЕрдм рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЧрдИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрди рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдЪреБрдирдирд╛ рдерд╛ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рджреМрдбрд╝ рдореЗрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреИрд▓реЗрдВрдбрд░ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реБрдП, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреЗрд╢реЗрд╡рд░ рдирд╣реАрдВ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рддрд┐рдерд┐ рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдХреЙрд▓рдо рднрд░реЗрдВ , рдЬреЛ рджреМрдбрд╝ рдХреА рддрд╛рд░реАрдЦ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рд╣рдореЗрдВ рдЗрд╕ рддрд┐рдерд┐ рд╕реЗ рдПрдХ рд╡рд░реНрд╖ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╣рдо рдХреЙрд▓рдо рд╡рд░реНрд╖ рдмрдирд╛рдПрдВрдЧреЗ ред рдЪреВрдВрдХрд┐ рд╣рдо рджреМрдбрд╝ рдореЗрдВ рдФрд╕рдд рдЧрддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкреНрд░рддреНрдпреЗрдХ рдПрдерд▓реАрдЯ рдХреА рдЧрддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рддреБрд░рдВрдд рдирдП рдХреЙрд▓рдо vproc рдореЗрдВ рдЗрд╕ рдЧрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдФрд╕рдд рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЧрддрд┐ред

for index, row in rs.iterrows():
    e = row['event']
    rd[e]['date'] = row['date']
    rd[e]['year'] = row['year']
    rd[e]['vproc'] = 100 * rd[e]['v'] / rd[e]['v'].mean()

рдпрд╣рд╛рдБ рдЕрдм рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреНрдпрд╛ рджрд┐рдЦрддреЗ рд╣реИрдВ: рдЕрдЧрд▓рд╛, рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдПрдХ рдПрдХрд▓ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВред
' Sprint 2019'
placesexnamecountry...thvdateyearvproc
01MShalev AlekseyRUS...1.16194422.1611282019-09-142019130.666668
12MNikolaev ArtemRUS...1.22861120.9586252019-09-142019123.576458
23MKuchierskiy AleksandrRUS...1.25555620.5088502019-09-142019120.924485
34FKorchagina MariyaRUS...1.29722219.8501072019-09-142019117.040401
45MSolodov IvanRUS...1.29805619.8373642019-09-142019116.965263
56MBukin SergeyRUS...1.30027819.8034612019-09-142019116.765365
67MLavrentev DmitriyRUS...1.30027819.8034612019-09-142019116.765365
78MDolgov PetrRUS...1.32166719.4829762019-09-142019114.875719
89MBezruchenko MikhailnRUS...1.34500019.1449812019-09-142019112.882832
910MRyazantsev DmitriyRUS...1.35944418.9415612019-09-142019111.683423
1011MIbragimov RamilRUS...1.37638918.7083752019-09-142019110.308511



ar = pd.concat(rd)

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХреИрд▓реЗрдВрдбрд░ рд╡рд░реНрд╖ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЫреЛрдбрд╝реЗрдВрдЧреЗ:

ar1 = ar.drop_duplicates(subset = ['name','year'], keep='first')

рдЖрдЧреЗ, рдЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рднреА рдЕрдиреВрдареЗ рдирд╛рдореЛрдВ рд╕реЗ, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рджреЛ рдмрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ:

nvc = ar1['name'].value_counts()
names = list(nvc[nvc > 1].index)

рдЙрдирдореЗрдВ рд╕реЗ 219,890 рд╣реИрдВред рдЖрдЗрдП рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдкреНрд░реЛ-рдПрдерд▓реАрдЯреЛрдВ рдХреЗ рдирд╛рдо рд╣рдЯрд╛рдПрдВ:

pro_names = ar[ar['group'].isin(['MPRO','FPRO'])]['name'].unique()
names = list(set(names) - set(pro_names))

рд╕рд╛рде рд╣реА 2010 рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдерд▓реАрдЯреЛрдВ рдХреЗ рдирд╛рдоред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ 10 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдирдореВрдирд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛ рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред рдЙрдиреНрд╣реЗрдВ rsa (рджреМрдбрд╝ рд╕рд╛рд░рд╛рдВрд╢ рд╕рднреА) рдФрд░ rda (рджреМрдбрд╝ рд╡рд┐рд╡рд░рдг рд╕рднреА) рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд░рдЦреЗрдВ ред

rdo = {} 

for e in rda:    
    if rsa[rsa['event'] == e]['year'].iloc[0] < 2010:
        rdo[e] = rda[e]

aro = pd.concat(rdo)
old_names = aro['name'].unique()
names = list(set(names) - set(old_names))

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдРрд╕реЗ рдирд╛рдо рдкрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рджрд┐рди рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЕрдкрдиреЗ рдирдореВрдиреЗ рдореЗрдВ рдкреВрд░реНрдг рдирд╛рдореЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред

namesakes = ar[ar.duplicated(subset = ['name','date'], keep = False)]['name'].unique()
names = list(set(names) - set(namesakes))

рдЗрд╕рд▓рд┐рдП 198,075 рдирд╛рдо рдмрд╛рдХреА рд╣реИрдВред рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ, рд╣рдо рдХреЗрд╡рд▓ рдкрд╛рдП рдЧрдП рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ:

ars = ar[ar['name'].isin(names)] #ars тАУ all recrds selected

рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдерд▓реАрдЯ рдХреЗ рдХрд░рд┐рдпрд░ рдореЗрдВ рдпрд╣ рдХрд┐рд╕ рд╡рд░реНрд╖ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ - рдкрд╣рд▓рд╛, рджреВрд╕рд░рд╛, рддреАрд╕рд░рд╛ рдпрд╛ рджрд╕рд╡рд╛рдВред рд╣рдо рд╕рднреА рдирд╛рдореЛрдВ рд╕реЗ рдПрдХ рд▓реВрдк рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред

ars['exp'] = '' #exp тАУ experience, counted in years of racing, starts from 1.

for n in names:    
    ind = ars[ars['name'] == n].index 
    yos = ars.loc[ind, 'year'].min() #yos тАУ year of start
    ars.loc[ind, 'exp'] = ars.loc[ind, 'year'] - yos + 1 

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ: рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдирд╛рдо рдЕрднреА рднреА рдмрдиреЗ рд░рд╣реЗред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рдм рдХреБрдЫ рдФрд╕рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд▓рд╛, рд╣рдо рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд▓рд┐рдП рд╕рд░рдгрд┐рдпрд╛рдБ рдмрдирд╛рддреЗ рд╣реИрдВ:
eventplacesexnamecountrygroupтАжthvdateyearvprocexp
тАж633MGolovin SergeyRUSM40-44тАж5.35611121.0973972014-08-312014106.0368791
тАж302MGolovin SergeyRUSM40-44тАж11.23638920.1132232015-08-302015108.2312542
тАж522MGolovin SergeyRUSM40-44тАж10.40277821.7249672016-07-172016111.2651073
тАж25MGolovin SergeyRUSM40-44тАж10.91083320.7133582017-09-232017112.9536444
тАж23MGolovin SergeyRUSM40-44тАж4.70000024.0425532017-06-032017120.5652114
тАж42MGolovin SergeyRUSM40-44тАж4.59916724.5696682018-06-172018124.5798625
тАж90MGolovin SergeyNORтАж14.06916716.0634962018-08-042018100.0018345
тАж86MGolovin SergeyRUSM45-49тАж9.82055623.0129552019-08-032019118.3757666



exp = [] 
vpm = [] #vpm тАУ v proc mean
numrecs = [] #number of records

for x in range(ars['exp'].min(), ars['exp'].max() + 1): 
    exp.append(x)
    vpm.append(ars[ars['exp'] == x]['vproc'].mean())
    numrecs.append(len(ars[ars['exp'] == x]))

рдпрд╣реА рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЖрдзрд╛рд░ рд╣реИ:



рдЕрдм, рдЗрд╕реЗ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ, рд╣рдо 1000 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд╛рдо рдЪреБрдиреЗрдВрдЧреЗ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред

names_samp = random.sample(names,1000)
ars_samp = ars[ars['name'].isin(names_samp)]

ars_samp = ars_samp.reset_index(drop = True)
exp_samp = []
vproc_samp = []

for n in names_samp:
    nr = ars_samp[ars_samp['name'] == n]
    nr = nr.sort_values('exp')
    exp_samp.append(list(nr['exp']))
    vproc_samp.append(list(nr['vproc']))

рдЗрд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдиреЗ рд╕реЗ рд░реЗрдЦрд╛рдВрдХрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реВрдк рдЬреЛрдбрд╝реЗрдВред

for i in range(len(exp_samp)):
    ax1.plot(exp_samp[i], vproc_samp[i], '.')

рдЕрдм рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ:



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдПрдХреНрд╕рдк рдЕрдиреБрднрд╡ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рд╕рднреА рдирд╛рдо, рдЬреЛ рд▓рдЧрднрдЧ 200 рд╣рдЬрд╛рд░ рд╣реИрдВ, рдЖрда рдШрдВрдЯреЗ рд▓рдЧрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЫреЛрдЯреЗ рдирдореВрдиреЛрдВ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдлрд┐рд░ рд░рд╛рдд рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдЪрд▓рд╛рдПрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдкрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рддрдирд╛рд╡ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореИрдВ рд╢рд╛рдо рдХреЛ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдлрд┐рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╕реБрдмрд╣ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдореЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛, рдФрд░ рдореИрдВ рдЧрдгрдирд╛ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рддрд▓рд╛рд╢рдиреЗ рд▓рдЧрд╛ред рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ

рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓рд╛ред рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдп рдХрд╛ рдореБрдЦреНрдп рддрд░реНрдХ рдбрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ workers.py рдлрд╝рд╛рдЗрд▓:

import pickle as pkl

def worker(args):
    names = args[0]
    ars=args[1]
    num=args[2]
    ars = ars.sort_values(by='name')
    ars = ars.reset_index(drop=True)  

    for n in names:   
        ind = ars[ars['name'] == n].index 
        yos = ars.loc[ind, 'year'].min()
        ars.loc[ind, 'exp'] = ars.loc[ind, 'year'] - yos + 1                      

    with open(r'D:\tri\par\prog' + str(num) + '.pkl', 'wb') as f:
        pkl.dump(ars,f)

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд╛рдо рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреЗ рдирд╛рдо , рднрд╛рдЧ datafreyma рдЧрд┐рд░рдлреНрддрд╛рд░реА рдХреЗрд╡рд▓ рдЗрди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде, рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ - рд╕рдВрдЦреНрдпрд╛ ред рдХрдореНрдкреНрдпреВрдЯреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдЖрдЦрд╝рд┐рд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реИрдкрдЯреЙрдк рдореЗрдВ , рд╣рдо рддрджрдиреБрд╕рд╛рд░ рддрд░реНрдХ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

num_proc = 8 #number of processors
args = []

for i in range(num_proc):
    step = int(len(names_samp)/num_proc) + 1
    names_i = names_samp[i*step:min((i+1)*step, len(names_samp))]
    ars_i = ars[ars['name'].isin(names_i)]
    args.append([names_i, ars_i, i])

рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

from multiprocessing import Pool
import workers

if __name__ ==  '__main__':     
    p=Pool(processes = num_proc)
    p.map(workers.worker,args)

рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдо рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реЗ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдореЗрдВ рд╡рд╛рдкрд╕ рдЯреБрдХрдбрд╝реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ:

ars=pd.DataFrame(columns = ars.columns)

for i in range(num_proc):
    with open(r'D:\tri\par\prog'+str(i)+'.pkl', 'rb') as f:    
        arsi = pkl.load(f)
        print(len(arsi))
        ars = pd.concat([ars, arsi])

рдЗрд╕ рдкреНрд░рдХрд╛рд░, 40 рдорд┐рдирдЯ рдХрд╛ рддреНрд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рдФрд░ 11 рдорд┐рдирдЯ рдореЗрдВ рдЧрдгрдирд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 8 рдШрдВрдЯреЗ рдХреЗ рдмрдЬрд╛рдп рдФрд░ рдЙрд╕ рд╢рд╛рдо рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ред рдЙрд╕реА рд╕рдордп рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рдХреИрд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдЖрдПрдЧрд╛ред рдпрд╣рд╛рдВ, рддреНрд╡рд░рдг рдХреЗрд╡рд▓ рдХреЛрд░ рдХреЗ 8 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдирд┐рдХрд▓рд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдиреЗ рдПрдХ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рддреЗрдЬреА рд╕реЗ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЧрдгрдирд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рддреЗрдЬ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ?

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рд╢рд╛рдВрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рдж рднреА рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рдП, рдпрд╛рдиреА рдкрд╛рдВрдбрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХреЗ рдкреВрд░реЗ рд╕реНрддрдВрднреЛрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рдиредред рдЗрд╕ рддрд░рд╣ рдХреА рдЧрдгрдирд╛ рдХрд┐рд╕реА рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдЪрдХреНрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдкрд░рд┐рдорд╛рдг рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕реБрдкрд░рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рднреАред рдФрд░ рд╕рд╛рде рдЖ рдЧрдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдХреИрд░рд┐рдпрд░ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рд╡рд░реНрд╖ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдвреВрдВрдврдирд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдирдореВрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрд╖ рдХреЗ рд╕рднреА рдирд╛рдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ 2010 рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЗрд╕ рд╡рд░реНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдЧрд▓реЗ рд╡рд░реНрд╖ - 2011

рд▓реЗрддреЗ рд╣реИрдВ ред рдлрд┐рд░ рд╕реЗ рд╣рдо рдЗрд╕ рд╡рд░реНрд╖ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдирд╛рдореЛрдВ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдирд╕реЗ рдХреЗрд╡рд▓ рдЕрдирдкреНрд░реЛрд╕реЗрд╕реНрдб рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ 2010 рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗ рдереЗ рдФрд░ 2011 рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдФрд░ рдЗрд╕реА рддрд░рд╣ рдмрд╛рдХреА рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдПред рдПрдХ рд╣реА рдЪрдХреНрд░, рд▓реЗрдХрд┐рди рджреЛ рд▓рд╛рдЦ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдиреМред

for y in range(ars['year'].min(),ars['year'].max()):
    arsynp = ars[(ars['exp'] == '') & (ars['year'] == y)] #arsynp - all records selected for year not processed
    namesy = arsynp['name'].unique()
    ind = ars[ars['name'].isin(namesy)].index
    ars.loc[ind, 'exp'] = ars.loc[ind,'year'] - y + 1

рдпрд╣ рдЪрдХреНрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдХреЛрдб рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛ рдЧрдпрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЦреИрд░, рдЖрдЦрд┐рд░рдХрд╛рд░, рдмрд╣реБрдд рд╕рд╛рд░рд╛ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдкрдиреА рддрд░рд╣ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдерд╛ред рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд┐рдпрд╛, рддреЛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдЕрдЬрдЧрд░ рдФрд░ рдЗрд╕рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдирд╛ рдерд╛ред рдпрд╣ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рдпрдВ рдХрд╛рдлреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдереЗред рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ?

рдкрд╣рд▓рд╛: рдбреЗрдЯрд╛ рдЕрдкреВрд░реНрдг рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╣реИрдВ, рдФрд░ рдпрд╣ рдЕрдХреНрд╕рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд░реБрдЭрд╛рдиреЛрдВ рдХреА рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдирдХреЗ рд╕рд╛рде рдЯрд┐рдВрдХрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ - рддреНрд░реБрдЯрд┐рдпреЛрдВ, рдЖрдЙрдЯрд▓реЗрдпрд░, рдорд╛рдирдХреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди, рдЖрджрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред

рджреВрд╕рд░рд╛:рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рд╣рд▓ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирд╛рд░реЗ рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдпрд╣ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдореЗрдВ рд╣реА рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдирд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ - рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдпрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧред

рддреАрд╕рд░рд╛: рдбреЛрдореЗрди рдЬреНрдЮрд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп рдпрд╛ рдЧреИрд░-рдорд╛рдирдХ рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдХрд░, рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪреЗрдВ, рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдбреЗрдЯрд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рджреВрд░реА, рд╕рдореБрджрд╛рдп рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдлрд╝реЙрд░реНрдо рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмреЗрд╡рдХреВрдл, рдЧрд▓рдд рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред

рдЪреМрдерд╛: рдЕрдЬрдЧрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореГрджреНрдз рд╕реЗрдЯ рд╣реИред рдХрднреА-рдХрднреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЖрдк рдЦреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдорд╣рд╛рди рд╣реИ! рдЗрд╕ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдХрд░рдг рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХрд╛рдо рдореЗрдВ рдЖрдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж: рд╕реЗрд▓реЗрдирд┐рдпрдо scraping, рдЖрдИрдПрд╕рдУ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рджреЗрд╢ рдХреЛрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pycountry рдХреЗ рд▓рд┐рдП рджреЗрд╢ рдХреЛрдб (datahub) рдУрд▓рд┐рдВрдкрд┐рдХ рдХреЛрдб рдХреЗ рд▓рд┐рдП, geopy рдкрддрд╛, рдкрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП folium - geodata, рдХреЗ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдЧ-guesser рдирд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдХреЗ рд▓рд┐рдП - рдмрд╣реБ - рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рдХреЗ рд▓рд┐рдП matplotlib , numpy , рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рдВрдбрд╛ - рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╡рд╣рд╛рдБ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реИред

рдкрд╛рдВрдЪрд╡рд╛рдВ: рд╡реИрд╢реНрд╡реАрдХрд░рдг рд╣рдорд╛рд░рд╛ рд╕рдм рдХреБрдЫ рд╣реИред рдирд┐рд░реНрдорд┐рдд рдкрдВрдбреЛрдВ рдХреЗ рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ , рдпрд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд╕рд┐рдпреЛрдВ рд╣рдЬрд╛рд░реЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдХреМрд╢рд▓ рдмрд╕ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЫрдареА:рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдХрд┐рд╕реА рднреА рдореИрдиреБрдЕрд▓ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкреИрдорд╛рдиреЗ рдкрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЬрдм рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХрдИ рдмрд╛рд░ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдордп рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпреЛрдВ рддрдХ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЦрд░рд╛рдм рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрдЧреА - рдЖрдк рдХреБрдЫ рднреВрд▓ рдЬрд╛рдПрдВрдЧреЗ, рдЖрдк рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЧрд▓рддреА рдХрд░реЗрдВрдЧреЗред ред рд╕рдм рдХреБрдЫ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд╣реИ, рдЕрдЧрд░ рдХреБрдЫ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдХ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рдпрд╣ рдареАрдХ рд╣реИ, рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрднреА рднреА рдЕрдзрд┐рдХ рдкреНрд▓рд╕рд╕ рд╣реЛрдВрдЧреЗред

рд╕рд╛рддрд╡реАрдВ:рдХреЛрдб рдХреЛ рдХрд╛рд░реНрдп рдХреНрд░рдо рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЗрд╕ рдХреЛрдб рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рдЦреНрдд рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд╕ рдЕрднрд┐рдиреНрди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди, рдЯреБрдХрдбрд╝реЗ-рдЯреБрдХрдбрд╝реЗ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдлрд╛рдпрджреЗ рд╣реИрдВ - рдпрд╣ рддреЗрдЬ рд╣реИ: рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд┐рдХрд╛рд╕, рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрдиред рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдкреНрд░рд▓реЛрднрди рд╕рд┐рд░реНрдл рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдпрд╛ рдореЗрдВ рд░реИрдкрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рд▓рд╛рдЗрди рд╣реИ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдирдпрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд, рдбреАрдИрдПрдлрд╝ред рдмреЗрд╢рдХ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд▓реЛрднрди рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЕрдЪреНрдЫреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ "рдЦреБрдж рдХреЗ рд▓рд┐рдП", рдХрдо рд╕реЗ рдХрдо рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдХрдИ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдордп рдХрд╛ рдирд┐рд╡реЗрд╢ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рднреБрдЧрддрд╛рди рдХрд░реЗрдЧрд╛ред рдФрд░ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реИрдкрдЯреЙрдк рдкрд░ рднреА, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЪреЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрддреЗ рд╣реБрдП - рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред

рдЖрдард╡рд╛рдВ: рдЕрдзрд┐рдХ рдмрд╛рд░ рдмрдЪрд╛рдПрдВред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░, рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╣реЗрдЬрд╛ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╡реЗ рд▓рдЧрднрдЧ 10. рдереЗред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдЪрд░рдг рдореЗрдВ рд╣реБрдЖред рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ рдХрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХреЙрд▓рдо рдореЗрдВ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдпрд╛ - рдпрд╣ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдФрд░ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдиреМрд╡рд╛рдВ:рд╕рдордп рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдирд┐рд╡реЗрд╢ рдХреЛ рдорд╛рдкрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рдореБрдЭреЗ рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрд╛, рдЬреЛ рдХреБрд▓ рдкреНрд░рддрд┐рд╢рдд рдХрд╛ рдПрдХ рдЕрдВрд╢ рдмрдирд╛рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рдерд╛, рдЖрдкрдХреЛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдлреЗрдВрдХрдирд╛ рдерд╛, рдФрд░ рдпрд╣ рд╕рдмред рдФрд░ рдореИрдВ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рдпрд╣ рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рдСрдЯреЛ-рдкреНрд░рд╢рд┐рдХреНрд╖рдгред рдпрд╣ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдкреЗрд░реЗрдЯреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - 80% рдкрд░рд┐рдгрд╛рдо 20% рд╕рдордп рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ рдЖрдЦрд┐рд░ рдХрд╛:рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рд╡реНрдпрд╛рдкрдХ рдмрдирд╛рддрд╛ рд╣реИред рдЗрдЪреНрдЫрд╛ рд╕реЗ, рдЖрдк рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЬреАрдм рджреЗрд╢реЛрдВ рдХреЗ рдирд╛рдо - рдЬреИрд╕реЗ рдкрд┐рдЯрдХреЗрд░реНрди рджреНрд╡реАрдк, рдХрд┐ рд╕реНрд╡рд┐рдЯреНрдЬрд░рд▓реИрдВрдб рдХреЗ рд▓рд┐рдП рдЖрдИрдПрд╕рдУ рдХреЛрдб CHE рд╣реИ, рд▓реИрдЯрд┐рди рд╕реЗ "рдХрдиреНрдлреЗрдбреЗрд░реЗрдЯрд┐рдпреЛ рд╣реЗрд▓реНрд╡реЗрдЯрд┐рдХрд╛", рд╕реНрдкреЗрдирд┐рд╢ рдирд╛рдо рдХреНрдпрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреНрд░рд╛рдпрдерд▓реЙрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рд░рд┐рдХреЙрд░реНрдб, рдЙрдирдХреЗ рдорд╛рд▓рд┐рдХ, рджреМрдбрд╝ рдХреЗ рд╕реНрдерд╛рди, рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рд╢рд╛рдпрдж рдХрд╛рдлреА рд╣реИред рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

All Articles