Skip to main content
 首页 » 编程设计

python之根据列类别从数据框中的行创建文本列表

2025年05月04日24lonelyxmas

我有一个类别和文本字符串的数据框:

category    strings 
 
pets        leash cat dog 
pets        cat dog frog 
candy       chocolate frog 
candy       jelly beans lollipops 

我想要 2 个列表:

petlist = ['leash', 'cat', 'dog', 'cat', 'dog', 'frog'] 
candylist = ['chocolate', 'frog', 'jelly', 'beans', 'lollipops'] 

以下代码列出了字符串列中的所有单词:

all_words = df['strings'].str.cat(sep=' ').split() 

我如何根据类别将其分成 2 个列表并将这 2 个列表放入字典中?

这是我尝试过的:

all_words = {} 
for cata in df['category']: 
    all_words['wordlist_%s'% cata]=[] 
for cata in df['category']: 
    df_cata = df.loc[df['category'] == cata] 
    all_words['wordlist_%s'% cata].append(df_cata['strings'].str.cat(sep=' ').split()) 

它有正确的键,但每个键一遍又一遍地给我该类别第一行的单词。所以我有一本字典,其中一个列表显示 leash cat dog leash cat dog,另一个列表显示 chocolate frog chocolate frog(所以它显然以我不希望的方式重新开始)。

请您参考如下方法:

应该这样做

df.groupby('category').strings.apply(' '.join).str.split() 
 
category 
candy    [chocolate, frog, jelly, beans, lollipops] 
pets              [leash, cat, dog, cat, dog, frog] 
Name: strings, dtype: object 

额外学分
获取唯一列表

df.groupby('category').strings.apply(' '.join).str.split().apply(np.unique) 
 
category 
candy    [beans, chocolate, frog, jelly, lollipops] 
pets                        [cat, dog, frog, leash] 
Name: strings, dtype: object 

成功者
value_counts 因为我觉得很有趣

df.groupby('category').strings.apply(' '.join).str.split(expand=True) \ 
    .stack().groupby(level=0).apply(pd.value_counts) 
 
 category            
candy     jelly        1 
          frog         1 
          lollipops    1 
          beans        1 
          chocolate    1 
pets      cat          2 
          dog          2 
          leash        1 
          frog         1 
dtype: int64