我有一个超过50行的大型数据框。对于每一行,我都有一列“令牌”,其中包含大量文本令牌。我使用了for循环以及频率分布来查找“令牌”列中每一行的前10个令牌。
我试图在我的数据框中添加一个名为“ top10”的新列,以便对于每一行,“ top10”列中包含前10个标记。
这是我用来查找每行的前10个令牌的当前代码。
for i in range(len(df)):
tokens = df.iloc[i]['tokens']
frequency = nltk.FreqDist(tokens)
print(" ", word_frequency.most_common(10))
我的数据框示例:
id location about age tokens
1 usa ... 20 ['jim','hi','hello'......]
...
...
40 uk ... 50 ['bobby','hi','hey'......]
预期输出:
id location about age tokens top10
1 usa ... 20 ['jim','hi','hello'......] ['hi', 'paddy'....]
...
...
40 uk ... 50 ['bobby','hi','hey'......] ['john', 'python'..]
top10列应按降序显示单词。
感谢您的帮助,谢谢!
答案 0 :(得分:0)
这是向DF添加新列的简单方法:
df['top10'] = word_frequency.most_common(10)
答案 1 :(得分:0)
apply
(不要展开列表)和reduce
(在行上,而不是默认列)的 pandas axis=1
更好,因为您已经在行上进行了迭代。熊猫会将您的列表解释为系列,而不适合单个单元格。
import pandas as pd
import nltk
df = pd.DataFrame({x :{'tokens': ['hello', 'python', 'is', 'is', 'is', 'dog', 'god', 'cat', 'act', 'fraud', 'hola', 'the', 'a', 'the', 'on', 'no', 'of', 'foo', 'foo']} for x in range(0,10)} ).T
def most_common_words_list (x):
word_count_tups = nltk.FreqDist(x['tokens']).most_common(2)
return [word for word, count in word_count_tups]
df ['top2'] = df.apply(most_common_words_list, result_type='reduce', axis=1)