首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速实现每个用户熊猫的最大值

快速实现每个用户熊猫的最大值
EN

Stack Overflow用户
提问于 2021-08-01 14:03:25
回答 1查看 38关注 0票数 0

下面是我正在使用的一段代码,它接受每个用户并为每个用户取一个值,根据排序方案,问题是它相对于我的需要运行缓慢,想知道它是否可以更快地实现:

代码语言:javascript
复制
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)

对那件事的任何帮助都会令人讨厌的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-01 14:20:32

您可以在列表理解中分配tag_max,然后与sort_values连接,然后再添加重复项:

代码语言:javascript
复制
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')

或者:

代码语言:javascript
复制
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')

代码语言:javascript
复制
  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        2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68611163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档