大佬教程收集整理的这篇文章主要介绍了根据 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")
nlargest
和 append
我们可以使用 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
,
我们可以通过将 nlargest
与 np.where
和 groupby
结合来解决这个问题:
(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,请注明来意。