我有一个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)
我想知道是否有一个更干净的方式(或更Python)实现这一点。我仍然不能用相同的函数计算所有的度量,因为我得到了一个错误
(ValueError: too many values to unpack)
当我尝试一次将值赋给多个df列时。不过,我想先看看是否有更简洁的方法来编写dictpre_max
函数。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐