<pre><code>import pandas as pd
import numpy as np
# copy/paste data (you can skip this since you already have a dataframe)
dict = {0 : {'key': 1 , 'message': "I have not received my gifts which I ordered ok", 'Final Category': 'voucher'},
1 : {'key': 2 , 'message': "hth her wells idyll McGill kooky bbc.co", 'Final Category': 'noclass'},
2 : {'key': 3 , 'message': "test test test 1 test", 'Final Category': 'noclass'},
3 : {'key': 4 , 'message': "test", 'Final Category': 'noclass'},
4 : {'key': 5 , 'message': "hello where is my reward points", 'Final Category': 'other'},
5 : {'key': 6 , 'message': "hi, can you get koovs coupons or vouchers here", 'Final Category': 'options'},
6 : {'key': 7 , 'message': "Hi Hey when you people will include amazon an", 'Final Category': 'options'}
}
# make DataFrame (you already have one)
df = pd.DataFrame(dict).T
# break up text into words, combine by 'Final' in my case
df.message = df.message.str.split(' ')
final_df = df.groupby('Final Category').agg(np.sum)
# make final dictionary
final_dict = {}
for label,text in zip(final_df.index, final_df.message):
final_dict[label] = {w: text.count(w) for w in text}
</code></pre>