У меня есть датафрейм, который выглядит так:
ngram
--------------------------
0 []
1 [_ting, tingk, ...]
2 [_pend, pendi, ...]
3 [_teat, teate, ...]
... ...
999 []
У меня также есть список диктов, которые выглядят так:
[
{
"label": "Academic",
"gram": "_ting"
},
{
"label": "Facility",
"gram": "_pend"
},
....,
{
"label": "Others",
"gram": "meing"
},
]
Как подсчитать вхождение слов в Dataframe, проверяя, существует ли он в списке или нет? Вывод моего желания такой, который будет использоваться для следующих вычислений:
academic_count = 1
facility_count = 1
services_count = 0
others_count = 0
Мне удалось реализовать это, но я просто использую вложенный цикл, который очень медленный из-за длины Dataframe ( 1000 данных) и длина списка (4000+ данных). Это мой код:
df = pd.DataFrame()
df['ngram'] = data
academic_chance = []
facility_chance = []
services_chance = []
others_chance = []
for idx, ngram_words in enumerate(df['ngram']):
academic_probs = []
facility_probs = []
services_probs = []
others_probs = []
for ngram in ngram_words:
academic_count = 0
facility_count = 0
services_count = 0
others_count = 0
for item in list_of_dicts:
if ngram == item["gram"] and item["label"] == "Academic":
academic_count += 1
elif ngram == item["gram"] and item["label"] == "Facility":
facility_count += 1
elif ngram == item["gram"] and item["label"] == "Services":
services_count += 1
elif ngram == item["gram"] and item["label"] == "Others":
others_count += 1
academic_cond_prob = (academic_count + 1) / academic_denominator
facility_cond_prob = (facility_count + 1) / facility_denominator
services_cond_prob = (services_count + 1) / services_denominator
others_cond_prob = (others_count + 1) / others_denominator
academic_probs.append(academic_cond_prob)
facility_probs.append(facility_cond_prob)
services_probs.append(services_cond_prob)
others_probs.append(others_cond_prob)
academic_chance.append(np.prod(academic_probs) * academic_cat_probs)
facility_chance.append(np.prod(facility_probs) * facility_cat_probs)
services_chance.append(np.prod(services_probs) * services_cat_probs)
others_chance.append(np.prod(others_probs) * others_cat_probs)
Есть идеи, как сделать это более эффективным?