[英]How to calculate the percentage of each value in a column follow each category in python pandas dataframe
[英]Calculate order percentage for each column value in dataframe
我的數據是這樣的:
d = {
'date' : ['2011-01-01', '2011-01-15', '2011-08-14', '2012-01-01', '2012-06-06', '2013-01-01', '2013-02-01','2013-03-01','2013-04-01', '2013-08-25']
,'year' : ['2011','2011','2011','2012','2012','2013','2013','2013','2013', '2013']
}
df = pd.DataFrame(d)
df['date'] = pd.to_datetime(df['date'])
df.sort_values('date', inplace= True)
date year
0 2011-01-01 2011
1 2011-01-15 2011
2 2011-08-14 2011
3 2012-01-01 2012
4 2012-06-06 2012
5 2013-01-01 2013
如何創建每年的訂單百分比,其中一年的第一次出現是0.0,最后一次是1.0?
輸出需要像這樣:
date year percent
0 2011-01-01 2011 0.00
1 2011-01-15 2011 0.50
2 2011-08-14 2011 1.00
3 2012-01-01 2012 0.00
4 2012-06-06 2012 1.00
5 2013-01-01 2013 0.00
6 2013-02-01 2013 0.25
7 2013-03-01 2013 0.50
8 2013-04-01 2013 0.75
9 2013-08-25 2013 1.00
我能夠通過每年創建幾個單獨的數據幀來實現這一點,並apply
一個功能,我將每個索引除以len(serie)
,但由於創建的數據幀數量,這似乎不高效。
你需要使用groupby
並計算(1) cumcount
和(2) size
,然后將兩者分開。
grp = df.groupby('year')
df['percent'] = grp.cumcount() / (grp['year'].transform('size') - 1)
df
date year percent
0 2011-01-01 2011 0.00
1 2011-01-15 2011 0.50
2 2011-08-14 2011 1.00
3 2012-01-01 2012 0.00
4 2012-06-06 2012 1.00
5 2013-01-01 2013 0.00
6 2013-02-01 2013 0.25
7 2013-03-01 2013 0.50
8 2013-04-01 2013 0.75
9 2013-08-25 2013 1.00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.