我有一个类别和文本字符串的数据框:
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
