首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚合、排序、入库、重命名,Dataframe中的每列

聚合、排序、入库、重命名,Dataframe中的每列
EN

Stack Overflow用户
提问于 2020-01-30 14:20:22
回答 1查看 171关注 0票数 1

我们如何编写一个函数来聚合、排名、入库df的每一列,通过添加前缀、排名和入库列来重命名聚合的列,然后将新的排名和入库列连接到df?

代码语言:javascript
复制
Import pandas as pd
data = {"index_id": range(101, 131),
        'company': ['Opera', 'Opera', 'Opera', 'Opera', 'Opera', 'Opera',
                    'Firefox', 'Firefox', 'Firefox', 'Firefox', 'Firefox', 'Firefox',
                    'Safari', 'Safari', 'Safari', 'Safari', 'Safari', 'Safari',
                    'Brave', 'Brave', 'Brave', 'Brave', 'Brave', 'Brave',
                    'Chrome', 'Chrome', 'Chrome', 'Chrome', 'Chrome', 'Chrome'],
        "rating": [4, 5, 3, 3, 3, 3,
                   4, 5, 5, 1, 5, 5,
                   1, 4, 1, 2, 1, 2,
                   1, 5, 1, 5, 1, 5,
                   5, 5, 5, 4, 5, 4]
        }
df = pd.DataFrame(data)
df = df.groupby(['company']).agg({'rating':['std', 'mean']})
df.columns = ['rating_std', 'rating_mean']
df_rank = df.rank(ascending = 0, method = 'dense').add_prefix('rank_')
output = df_rank.copy(deep=True)
bin_labels = ['Bronze', 'Silver', 'Gold', 'Platinum', 'Diamond']
output['bin_rank_rating_std'] = pd.qcut(output['rank_rating_std'],
                              q=[0, .2, .4, .6, .8, 1],
                              labels=bin_labels)
output['bin_rank_rating_mean'] = pd.qcut(output['rank_rating_mean'],
                              q=[0, .2, .4, .6, .8, 1],
                              labels=bin_labels)

在df_rank中,我可以对标准差和平均值进行排名,然后添加排名的前缀,但是在不写下每一列的情况下,我不知道如何对每个排名的列进行绑定和重命名。我想写一个函数或使用一个for循环,因为我的原始数据集。我有30列要排序和入库,所以我不能在一个函数中给每一列都命名。数据帧输出将是它应该看起来的样子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-30 14:26:30

使用带有lambda函数的DataFrame.apply,然后使用DataFrame.add_prefixDataFrame.join到原始DataFrame

代码语言:javascript
复制
#simplify for not necessary set new columns names by list
df = df.groupby(['company'])['rating'].agg(['std', 'mean']).add_prefix('rating_')

df_rank = df.rank(ascending = 0, method = 'dense').add_prefix('rank_')

bin_labels = ['Bronze', 'Silver', 'Gold', 'Platinum', 'Diamond']
output = df_rank.apply(lambda x:pd.qcut(x, q=[0, .2, .4, .6, .8, 1], labels=bin_labels))
output = df_rank.join(output.add_prefix('bin_'))
print (output)
         rank_rating_std  rank_rating_mean bin_rank_rating_std  \
company                                                          
Brave                1.0               4.0              Bronze   
Chrome               5.0               1.0             Diamond   
Firefox              2.0               2.0              Silver   
Opera                4.0               3.0            Platinum   
Safari               3.0               5.0                Gold   

        bin_rank_rating_mean  
company                       
Brave               Platinum  
Chrome                Bronze  
Firefox               Silver  
Opera                   Gold  
Safari               Diamond  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59980132

复制
相关文章

相似问题

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