下面是我正在使用的一段代码,它接受每个用户并为每个用户取一个值,根据排序方案,问题是它相对于我的需要运行缓慢,想知道它是否可以更快地实现:
import pandas as pd
df1 = pd.DataFrame({'user': ['a', 'b', 'c', 'd'],
'user_info': [1, 3, 5, 6]},
columns=['user', 'user_info'])
df2 = pd.DataFrame({'user': ['a', 'b', 'f', 'h'],
'user_info': [3, 5, 5, 6]},
columns=['user', 'user_info'])
data_frames_dict_with_importance_score = {2: df2,
1: df1}
def apply_importance(df, importance):
df['tag_max'] = importance
return df
join_list = ['user', 'user_info']
final_recommendations = pd.concat([apply_importance(df[join_list], importance)
for importance, df in data_frames_dict_with_importance_score.items()])
final_recommendations = final_recommendations.sort_values(['user', 'tag_max'], ascending=False).groupby(
['user'], as_index=False).head(1)
final_recommendations.reset_index(inplace=True)对那件事的任何帮助都会令人讨厌的!
发布于 2021-08-01 14:20:32
您可以在列表理解中分配tag_max,然后与sort_values连接,然后再添加重复项:
out = pd.concat((v.assign(tag_max=k) for
k,v in data_frames_dict_with_importance_score.items()))\
.sort_values(['user', 'tag_max'], ascending=False).drop_duplicates('user')或者:
out = pd.concat(data_frames_dict_with_importance_score,names=['tag_max','Index'])\
.reset_index().sort_values(['user', 'tag_max'], ascending=False).drop_duplicates('user') user user_info tag_max
3 h 6 2
2 f 5 2
3 d 6 1
2 c 5 1
1 b 5 2
0 a 3 2https://stackoverflow.com/questions/68611163
复制相似问题