#python #pandas
#python #pandas
Вопрос:
У меня есть 3 фрейма данных в Pandas:
1) user_interests:
С «пользователем» в качестве идентификатора и «интересом» в качестве интереса:
2) similarity_score:
С «пользователем» в качестве уникального идентификатора, соответствующего идентификаторам в user_interests:
3) similarity_total:
С «интересом», представляющим собой список всех уникальных интересов в user_interets:
Что мне нужно сделать:
Шаг 1: найдите интерес из similarity_table в user_interests
Шаг 2: Возьмите соответствующего пользователя из user_interests и сопоставьте его с пользователем в similarity_score
Шаг 3: возьмите соответствующий similarity_score из similarity_score и добавьте его к соответствующему интересу в similarity_total
Конечная цель состоит в том, чтобы суммировать оценки сходства всех пользователей, интересующихся предметами в similarity_total. Может помочь диаграмма:
Я знаю, что это можно сделать в Pandas в одной строке, однако я еще не там. Если кто-нибудь может указать мне правильное направление, это было бы потрясающе. Спасибо!
Ответ №1:
IIUC, я думаю, вам нужно:
user_interest['similarity_score'] = user_interest['users'].map(similarity_score.set_index('user')['similarity_score'])
similarity_total = user_interest.groupby('interest', as_index=False)['similarity_score'].sum()
Вывод:
interest similarity_score
0 Big Data 1.000000
1 Cassandra 1.338062
2 HBase 0.338062
3 Hbase 1.000000
4 Java 1.154303
5 MongoDB 0.338062
6 NoSQL 0.338062
7 Postgres 0.338062
8 Python 0.154303
9 R 0.154303
10 Spark 1.000000
11 Storm 1.000000
12 decision tree 0.000000
13 libsvm 0.000000
14 machine learning 0.000000
15 numpy 0.000000
16 pandas 0.000000
17 probability 0.000000
18 regression 0.000000
19 scikit-learn 0.000000
20 scipy 0.000000
21 statistics 0.000000
22 statsmodels 0.000000
Комментарии:
1. Спасибо, это действительно полезно
2. @SandyLee Всегда пожалуйста. Будьте в безопасности и будьте здоровы.
Ответ №2:
Я не уверен, какой код вы уже написали, но пробовали ли вы что-то подобное для слияния? Однако это не одна строка.
# Merge user_interest with similarity_total dataframe
ui_st_df = user_interests.merge(similarity_total, on='interest',how='left').copy()
# Merge ui_st_df with similarity_score dataframe
ui_ss_df = ui_st_df.merge(similarity_score, on='user',how='left').copy()
Комментарии:
1.Спасибо, это действительно полезно