繁体   English   中英

如何在 Python 中计算 groupby 中的百分比

[英]How to calculate percentage in groupby in Python

我有一个看起来像这样的数据框:

DATE                  SCHEDULED      ARTICLE_CODE      
2021-10-01            2              001
2021-10-01            2              002
2021-10-01            2              003
2021-11-01            2              001
2021-11-01            2              002
2021-11-01            2              003
2021-11-01            2              004
...

我想要的是获得每个日期的每篇文章代码的预定百分比

我想得到的是:

DATE                  SCHEDULED      ARTICLE_CODE  PERCENTAGE    
2021-10-01            2              001           33.3
2021-10-01            2              002           33.3
2021-10-01            2              003           33.3
2021-11-01            2              001           25
2021-11-01            2              002           25
2021-11-01            2              003           25
2021-11-01            2              004           25
...

我认为使用 groupby 是可行的,但我无法做到

使用Series.value_countsSeries.map作为计数列,从右侧除以100除以Series.rdiv

df['PERCENTAGE'] = df['DATE'].map(df['DATE'].value_counts()).rdiv(100).round(1)
print (df)
         DATE  SCHEDULED  ARTICLE_CODE  PERCENTAGE
0  2021-10-01          2             1        33.3
1  2021-10-01          2             2        33.3
2  2021-10-01          2             3        33.3
3  2021-11-01          2             1        25.0
4  2021-11-01          2             2        25.0
5  2021-11-01          2             3        25.0
6  2021-11-01          2             4        25.0

另一个想法:

df['PERCENTAGE'] = (100  / df.groupby('DATE')['ARTICLE_CODE'].transform('size')).round(1)
df['PERCENTAGE'] = df.groupby('DATE')['ARTICLE_CODE'].apply(lambda x: x*100/(x*len(x))) 

这是pd.crosstab的一种方法-

df['PERCENTAGE'] = pd.crosstab(df['DATE'], df['ARTICLE_CODE'], normalize='index').stack().where(lambda x: x>0).dropna().round(2).reset_index()[0]

输出

         DATE  SCHEDULED  ARTICLE_CODE  PERCENTAGE
0  2021-10-01          2             1        0.33
1  2021-10-01          2             2        0.33
2  2021-10-01          2             3        0.33
3  2021-11-01          2             1        0.25
4  2021-11-01          2             2        0.25
5  2021-11-01          2             3        0.25
6  2021-11-01          2             4        0.25

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM