gpt4 book ai didi

python - 不同列表中的同一类别

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:12 27 4
gpt4 key购买 nike

我最初有一个像这样的数据框

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

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

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

但我认为这不是实现目标的 Python 方式。此外,我不知道如何用它们的键替换行内的字符串(也是我的字典中的值)。

是否有更好的方法来提取和映射类别?

基本上,我需要做的是:

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

我想要达到的是:

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

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

最佳答案

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

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]

关于python - 不同列表中的同一类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54986376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com