英文:
Efficient way to divide a pandas col by a groupby df
问题
以下是您提供的内容的翻译部分:
问题
如何计算每年的number_x的百分比?意思是:
直接除法不起作用,因为原始数据框中的年份无法设置为索引,因为它不是唯一的。
现在我正在执行以下操作,但它效率不高,我相信有更好的方法。
df= pd.merge(df, df.groupby('year').sum(), left_on='year',right_index=True)
df['%'] = round((df['number_x'] / df['number_y'])*100 , 2)
df = df.drop('number_y', axis=1)
谢谢!
英文:
Easier to explain with an example, say I have an example dataframe here with year
, cc_rating
and number_x
.
df = pd.DataFrame({"year":{"0":2005,"1":2005,"2":2005,"3":2006,"4":2006,"5":2006,"6":2007,"7":2007,"8":2007},"cc_rating":{"0":"2","1":"2a","2":"2b","3":"2","4":"2a","5":"2b","6":"2","7":"2a","8":"2b"},"number_x":{"0":9368,"1":21643,"2":107577,"3":10069,"4":21486,"5":110326,"6":10834,"7":21566,"8":111082}})
df
year cc_rating number_x
0 2005 2 9368
1 2005 2a 21643
2 2005 2b 107577
3 2006 2 10069
4 2006 2a 21486
5 2006 2b 110326
6 2007 2 10834
7 2007 2a 21566
8 2007 2b 111082
Problem
How can I get the % of number_x per year? Meaning:
Straight division wont work as year cant be set as the index in the original df as it is not unique.
Right now I'm doing the following but its quite inefficient and im sure theres a better way.
df= pd.merge(df, df.groupby('year').sum(), left_on='year',right_index=True)
df['%'] = round((df['number_x'] / df['number_y'])*100 , 2)
df = df.drop('number_y', axis=1)
Thanks!
答案1
得分: 0
以下是已翻译好的部分:
可能的解决方案:
(df.assign(
perc = (100*df.number_x.div(df.groupby('year').number_x.transform('sum')))
.round(2))))
输出:
year cc_rating number_x perc
0 2005 2 9368 6.76
1 2005 2a 21643 15.62
2 2005 2b 107577 77.62
3 2006 2 10069 7.10
4 2006 2a 21486 15.14
5 2006 2b 110326 77.76
6 2007 2 10834 7.55
7 2007 2a 21566 15.03
8 2007 2b 111082 77.42
英文:
A possible solution:
(df.assign(
perc = (100*df.number_x.div(df.groupby('year').number_x.transform('sum')))
.round(2)))
Output:
year cc_rating number_x perc
0 2005 2 9368 6.76
1 2005 2a 21643 15.62
2 2005 2b 107577 77.62
3 2006 2 10069 7.10
4 2006 2a 21486 15.14
5 2006 2b 110326 77.76
6 2007 2 10834 7.55
7 2007 2a 21566 15.03
8 2007 2b 111082 77.42
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论