找出可以用作缺失值建议的特定字​​符串

时间:2018-11-01 23:38:40

标签: python string pandas

这在某种程度上是一个分层的问题,我一直在绞尽脑汁试图找出如何最好地解决问题的方法。

数据集具有将各种产品描述分类的品牌(较高级别)和子品牌(较低级别)。我已将其加载到熊猫数据框中以尝试对其进行操作。

这是数据集的一个子集:



    Brand  Sub_Brand  Product_Description

    7-Up   NaN        7-Up Original Can 327ml

    7-Up   Diet       Diet 7-Up Bottle 327ml

    7-Up   Diet       Diet 7-Up Can 327ml

    7-Up   NaN        7-Up Lemon Lemon Peach 327ml

    7-Up   NaN        7-Up Lemon Lemon Grapefruit 327ml

    7-Up   NaN        7-Up Lemon Lemon Original 327ml


在此示例中,Diet已经填充在“子品牌”字段中,因为它表示与那些产品相关联的子品牌,但是对于其他产品(例如“柠檬柠檬”产品),我们缺少值。我要完成的工作是找出一种方法将“柠檬柠檬”冲洗掉,并将其放置在子品牌中,因为它是一个子字符串,可以在多种产品中不断出现。

当您自己查看时很容易识别,我希望找到能将其清除的代码。

values = pd.DataFrame()
for index, row in df['Product_Description'].iteritems():
    query = row.split()
    values = values.append(query)

flush = pd.DataFrame(values.groupby(0).size())
flush = flush.sort_values(by=[0],ascending=False)
flush['word'] = flush.index
flush = flush.reset_index(drop=True)
flush.columns = ['count', 'word']
flush = flush[~flush['word'].str.lower().isin(df['Brand'].str.lower())]

这可以帮助我清除“柠檬”作为最重复的单词,并且可以将其插入列中,以作为该单词在Product_Description列中作为子字符串出现的位置的建议。但是,不是想要的结果就是“柠檬柠檬”。

我还考虑过使用Fuzzywuzzy并迭代生产说明以与所有其他行进行token_sort_ratio匹配,以查看哪些说明始终具有较高的百分比匹配计数

例如,结果为:

fuzz.token_set_ratio("7UP LEMON LEMON ORIGINAL", "7UP LEMON LEMON WHITE PEACH")
67

我正在考虑使用> 60的任何东西将它们存储在列表中,并使用以下函数来获取最长的公共子字符串

def longestSubstringFinder(string1, string2):
    answer = ""
    len1, len2 = len(string1), len(string2)
    for i in range(len1):
        match = ""
        for j in range(len2):
            if (i + j < len1 and string1[i + j] == string2[j]):
                match += string2[j]
            else:
                if (len(match) > len(answer)): answer = match
                match = ""
    return answer

如果我通过了

test = longestSubstringFinder("7UP LEMON LEMON CUCUMBER MINT", "7UP LEMON LEMON WHITE PEACH").strip()
'7UP LEMON LEMON'

我可以继续删除该品牌,因为这两个记录的数据框中已经存在该品牌,并且最终我得到了很好的子品牌建议“柠檬柠檬”

我敢肯定有更好的方法,我希望能朝正确的方向指出,我可以将它们放在一起并遍历340,000行以上的整个数据集

任何帮助将不胜感激

0 个答案:

没有答案