[英]Compute percentage for group using groupby in pandas dataframe
在以下 dataframe 中:
country admin_1 admin_2 year season_name production area
A1 B1 C1 1991 Primary 43170 25980
A1 B1 C1 1990 Primary 45624 29820
A1 B1 C1 1989 Primary 56310 31284
A1 B1 C1 1988 Primary 33523 24832
A1 B1 C1 1987 Primary 49388 33479
A1 B1 C1 1986 Primary 36475 27425
A1 B1 C1 1985 Primary 32278 32046
A1 B1 C1 1984 Primary 52073 28929
A1 B1 C1 1983 Primary 51746 32855
A1 B1 C2 1991 Primary 32010 20010
A1 B1 C2 1990 Primary 52704 19520
A1 B1 C2 1989 Primary 65240 18640
A1 B1 C2 1988 Primary 11570 17800
A1 B1 C2 1987 Primary 51282 20350
A1 B1 C2 1986 Primary 25808 19816
A1 B1 C2 1985 Primary 16935 18817
A1 B2 C3 1987 Primary 51282 20350
A1 B2 C3 1986 Primary 25808 19816
A1 B2 C3 1985 Primary 16935 18817
我想通過平均每個 admin_2 的所有年份的面積來確定每個 admin_2 的面積百分比,然后他們計算百分比。 這是我嘗試過的:
df['area_percentage'] = df.groupby(['country', 'admin_2'])['area'].apply(lambda x: x / x.sum())
嘗試:
df['area_percentage'] = df['area'] / df.groupby(['country', 'admin_2'])['area'].transform('sum') * 100
好吧,由於這個問題有些模糊,我會做一些心理鍛煉。
讓我們看看如何通過平均每個 admin_2 的所有年份的面積來解釋“每個 admin_2 的面積百分比” 。
看着第一次嘗試,這被認為是錯誤的,我可以想出這樣的事情:
s = df.groupby(['country', 'admin_2'])['area'].mean()
s /= s.sum()
Output:
country admin_2
A1 C1 0.432095
C2 0.281167
C3 0.286738
但它看起來很奇怪。 標准化手段有什么好處? 我不知道。 所以讓我們跳過它,做一些不同的事情。
如果我們admini_2
分組的所有年份的area
相加並將結果除以總area
會怎樣?
s = df.groupby(['country', 'admin_2'])['area'].sum()
s /= s.sum()
Output:
country admin_2
A1 C1 0.578936
C2 0.293003
C3 0.128061
好吧,如果area
的性質意味着積累,它可能會起作用。 在這種情況下,我們可以討論每個admin_2
的總area
百分比。
但是,如果桌子上沒有“積累”怎么辦? 假設面積是指一年中必要時必須完成的工作量。 在這種情況下,我們可以這樣解釋請求:按year
比較每個admin_2
的area
。 從提供的數據中,我可能會得出結論, country
和admin_1
並不重要。 它們對於每個admin_2
都是相同的,所以我想它們可以被忽略(否則,我們只需將它們添加到 pivot 表索引中)。 在這種情況下,我會做這樣的事情:
_df = df.pivot('admin_2','year','area')
_df = (_df / _df.sum()).T
display(_df.fillna(0).style.format('{0:.0%}'.format))
_df.plot(kind='bar'))
Output:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.