Запрос блокируется ошибкой "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()" и путь исправления неясен
Может быть, торможу, но не могу понять, как заставить мой код работать, его смысл — вёрстка таблицы, однако натыкаюсь на ошибку "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()", и понятно только место исправления (спасибо колабу), как исправить — понятия не имею. Код:
import pandas as pd
import psycopg2
import psycopg2.extras
import numpy as np
from operator import itemgetter
import itertools
from collections import Counter
def table():
query = '''with cnt_table as (select user_id, count(distinct items.resource_id) cnt
from final.carts carts
join final.cart_items items on items.cart_id = carts.id
where resource_type = 'Course' and carts.state = 'successful'
group by user_id)
select *
from cnt_table
join final.carts carts on carts.user_id = cnt_table.user_id
join final.cart_items items on items.cart_id = carts.id
where cnt > 1 and resource_type = 'Course' and carts.state = 'successful'
'''.format()
conn = psycopg2.connect("dbname='skillfactory' user='skillfactory' host='84.201.134.129' password='cCkxxLVrDE8EbvjueeMedPKt' port=5432")
dict_cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
dict_cur.execute(query)
rows = dict_cur.fetchall()
data = []
for row in rows:
data.append(dict(row))
return data
df = pd.DataFrame(table())
group_df = df.groupby('user_id')['resource_id'].apply(lambda x:list(np.unique(x))).reset_index()
list_courses = list()
for resource in group_df['resource_id']:
for pair in itertools.combinations(resource, 2):
list_courses.append(pair)
list_courses_set = set(list_courses)
len(list_courses_set)
count = Counter()
for i in list(list_courses):
count[i] += 1
sorted_pairs = Counter(count).most_common(1)
sorted_pairs_dict = dict(sorted_pairs)
print(sorted_pairs_dict)
def recommend(course):
list_course = []
for i in sorted_pairs_dict.keys():
if i[0] == course:
list_course.append(i, sorted_pairs_dict[i])
sorted_list_course = sorted(list_course, key=lambda x: x[1], revers=True)
return sorted_list_course[:2]
recommend_df = pd.DataFrame(columns=['Recommend 1', 'Recommend 2'])
for i in sorted_pairs:
if len(recommend(i)) == 2:
recommend_df.loc[i] == [recommend(i)[0][0][1], recommend(i)[1][0][1]]
elif len(recommend(i)) == 1:
recommend_df.loc[i] == [recommend(i)[0][0][1], np.nan]
else:
recommend_df.loc[i] == [np.nan, np.nan]
recommend_df.head()