[英]Aggregating, Ranking, Binning, Renaming, Each Column in a Dataframe
我們如何編寫一個函數來聚合、排序、合並 df 的每一列,通過添加前綴、排序和合並列來重命名聚合,然后將新的 rank 和 bin 列加入到 df 中?
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 列要進行排名和分箱,因此我無法在函數中命名每一列。 數據幀輸出將是它應有的樣子。
使用DataFrame.apply
和 lambda 函數,然后DataFrame.add_prefix
和DataFrame.join
到原始DataFrame
:
#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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.