程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了根据 Dataframe 中的列查找 Top-n 并将其余的归入其他列 nlargest 和 append大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决根据 Dataframe 中的列查找 Top-N 并将其余的归入其他列 nlargest 和 append?

开发过程中遇到根据 Dataframe 中的列查找 Top-N 并将其余的归入其他列 nlargest 和 append的问题如何解决?下面主要结合日常开发的经验,给出你关于根据 Dataframe 中的列查找 Top-N 并将其余的归入其他列 nlargest 和 append的解决方法建议,希望对你解决根据 Dataframe 中的列查找 Top-N 并将其余的归入其他列 nlargest 和 append有所启发或帮助;

我有一个如下所示的数据框:

根据 Dataframe 中的列查找 Top-n 并将其余的归入其他列
      
    nlargest 和 append

我想创建另一个看起来像这样的(用于绘图和报告):

根据 Dataframe 中的列查找 Top-n 并将其余的归入其他列
      
    nlargest 和 append

我能够完成这项工作,但感觉非常笨重和不优雅。如果有人能提出一种很好的 Pythonic 方式来解决它,我将不胜感激。我的代码如下。谢谢

import pandas as pd
import numpy as np
import random

#CreaTing a sample dataset

Alphabet = [chr(letter) for letter in range(97,108)]
scores = [random.randint(0,15) for item in range(11)]

res = Dict(zip(Alphabet,scores))

test_df = pd.DataFrame(List(res.items()),columns = ['name','score']) 


#SorTing the dataframe in descending order based on column of interest

test_df = test_df.sort_values(by=['score'],ascending = falsE)


#CreaTing a column of rank,where low rank equals high number

test_df['ranking'] = np.arange(1,len(test_df)+1)


# converTing the rank into top-5 and then everything else 6 

test_df['ranking'] = test_df['ranking'].apply(lambda x: x if x < 6 else 6)


# GrouPing by rank columns,this lumps everything else together

test_df_group = test_df.groupby(['ranking']).agg({"name" : ''.join,"score" : sum})


#renaming the data as "others"

test_df_group['name'] = test_df_group['name'].apply(lambda x: x if len(X) < 2 else "Others")

解决方法

nlargestappend

我们可以使用 nlargest 选择前 n 行(按 Score 列降序排列),然后创建一个包含其余行聚合的字典,现在将此字典附加到 topn 数据帧以获得所需的结果

topn = test_df.nlargest(5,'Score')
remaining = {'Name': 'Others','Score': test_df['Score'].drop(topn.indeX).sum()}

topn.append(remaining,ignore_index=TruE)

     Name  Score
0       h     15
1       b     10
2       a      9
3       k      9
4       f      8
5  Others     32
,

我们可以通过将 nlargestnp.wheregroupby 结合来解决这个问题:

(df
 .assign(Name = lambda df: np.where(df.Score.isin(df.Score.nlargest()),df.Name,'others')
         )
.groupby('Name',as_index=falsE)
.sum()
)

     Name  Score
0       a     12
1       f     10
2       h     10
3       j     15
4       k     14
5  others     26

大佬总结

以上是大佬教程为你收集整理的根据 Dataframe 中的列查找 Top-n 并将其余的归入其他列 nlargest 和 append全部内容,希望文章能够帮你解决根据 Dataframe 中的列查找 Top-n 并将其余的归入其他列 nlargest 和 append所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。