计算某组

时间:2016-08-02 04:47:36

标签: python pandas

我有一个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函数。

0 个答案:

没有答案