簡體   English   中英

計算數據框中每個列值的訂單百分比

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM