我有一个csv,第一行是标题,如下所示:
player,career
a,"arsenal, arsenal fc, arsnal fc, barcelona, chelsea"
b,"barcelona, barcelona fc, arsenal, liverpool, liverpol"
c,"newcastle fc, stoke city"
d,"chelsea, everton"
职业生涯是(足球)球员职业生涯中有序的球队。如果同一支球队出现不止一次,那是因为球员在那里度过了不止一个赛季。例如,球员D在切尔西,然后转移到埃弗顿。球员A在前往巴塞罗那之前在阿森纳度过了三个赛季。
我想确定当玩家移动到新团队时(这是一个挑战,因为团队的名称没有标准化)。为了做到这一点,我计算了字符串之间的相似比(我正在使用difflib.SequenceMatcher)。基本的想法是,我向后看并将焦点团队与过去的团队进行比较。我也期待并将焦点小组与未来的小组进行比较。
例如,对于玩家A和元素' arsnal fc ' (集合中的第三个)我计算对(2,1)和(2,0)的相似比,得到最大值和最小值(向后相似度)。然后我计算对(2,3)和(2,4)的比率,得到最大值和最小值(前向相似度)。
下面我将展示创建包含后向相似比最大值的字典的脚本(我可以调整dictpre_max
函数以获得我需要的其他测量值。)
import pandas as pd
from functools import partial
import difflib
import re
from itertools import *
from decimal import Decimal
def split_it(x):
return re.findall('\w+', x)
def apply_sm(c1, c2):
return round(difflib.SequenceMatcher(None, c1, c2).ratio(),4)
def dictpre_max(x):
dictpre = {}
career = x.split(',')
for index,team in enumerate(career):
if index == 0:
a = index
else:
for preorder in range(0,index+1):
if preorder != index:
dictpre[index,preorder] = apply_sm(career[index],career[preorder])
dictpremax = {}
for index,team in enumerate(career):
total = []
for preorder in range(0,index+1):
if preorder != index:
a = [dictpre[(index,preorder)]]
total = total + a
if len(total)>0:
dictpremax[index]=max(total)
return dictpremax
filenameinput = 'careers.csv'
df = pd.read_csv(filenameinput)
df['maxpre'] = df['career'].apply(dictpre_max)
print(df)
我想知道是否有更清洁的方式(或更多的pythonic)实现这一目标。我仍然无法计算具有相同功能的所有度量,因为我收到错误
(ValueError:要解压的值太多)
当我尝试一次将值分配给多个df列时。但是,我想首先尝试查看是否有更简洁的方式来编写dictpre_max
函数。