不同列表中的相同类别

2024-05-19 02:13:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我最初有一个数据帧

datax = {'col1' : [['apple','pear','peach'],['kiwi','pear','apple','watermelon']]}
db = pd.DataFrame(columns = ['col1'], data = datax))

列“col1”的每一行都是字符串列表,字符串的每个元素都应该是一个类别。 我要做的是创建一个category对象,其中包含来自不同行的所有类别,然后我想对每一行应用分类转换。 我成功地创建了一个字典,其中包含了不同行中的所有单词:

categ = []
for lst in db['col1']:
    for term in lst:
        if term not in categ:
            categ.append(term)
categ = pd.Series(categ, dtype = 'category')

但我认为这不是一个达到目标的好方法。 此外,我不知道如何用键重新计算行中的字符串(这也是我字典中的值)

有没有更好的方法来提取和映射类别

基本上,我需要做的是:

>>db['col1']
   [['apple','pear','peach'],
   ['kiwi','pear','apple','watermelon']]

我想说的是:

>>db['col1']
   [[0,1,2],
   [3,1,0,4]]

请注意,我正在尝试使用字典,因为我希望能够反转操作并重新创建原始列。 我有两行多,所以我不能列举所有可能的情况


Tags: 字符串inappledb字典类别col1pd
1条回答
网友
1楼 · 发布于 2024-05-19 02:13:15

好的,所以你可以使用,解释被添加为注释:

import itertools
a=list(itertools.chain.from_iterable(db.col1)) #flatten the lists
d=dict(zip(a,pd.factorize(a)[0])) #create a dictionary mapping

#output->{'apple': 0, 'pear': 1, 'peach': 2, 'kiwi': 3, 'watermelon': 4}
#next line replaces the value of list with value of dictionary d

db.col1.apply(lambda x: [sum(int(d[k]) for k in y.split()) for y in x])

输出

0       [0, 1, 2]
1    [3, 1, 0, 4]

相关问题 更多 >

    热门问题