【问题标题】:Find Percentage of each class for every ID查找每个 ID 的每个类的百分比
【发布时间】:2022-02-11 02:18:06
【问题描述】:

我正在使用一个有 20 个 ID 的数据框,每个 ID 大约有 10-15 个商店,每个商店都分配了一个状态(零、负和正)。

数据:

data = 
ID      STORE  STATUS           
100001  1      zero 
100001  2      positive 
100001  3      zero 
100001  4      negative     
100001  5      zero    
100001  6      zero 
100001  7      positive 
100001  8      negative 
....

问题:

我想知道每个 id 有多少商店是零/正/负。

我的尝试:

zero = 0

for item in data['ID'].unique():
    items = data[data['ID']==item]
    lenght = len(items)
    print(lenght)
    for index, i in items.iterrows():
        if i['STATUS'] == 'Zero':
            zero += 1
            pct = zero/lenght
    items['PCT'] = zero/lenght
    print(items)

我上面代码的结果:

ID      STORE  STATUS.    PCT           
100001  1      zero       0.5
100001  2      positive   0.5
100001  3      zero       0.5
100001  4      negative   0.5
100001  5      zero       0.5
100001  6      zero       0.5
100001  7      positive   0.5
100001  8      negative   0.5

预期结果:

ID      STORE  STATUS.    PCT           
100001  1      zero       0.5
100001  2      positive   0.25
100001  3      zero       0.5
100001  4      negative   0.25
100001  5      zero       0.5
100001  6      zero       0.5
100001  7      positive   0.25
100001  8      negative   0.25

【问题讨论】:

  • 如果你在 pands 中使用显式循环,你经常做错事。使用其内置的分组方法。
  • 不知道这是不是你要找的东西:stackoverflow.com/questions/50169311/…
  • 谢谢@Mark,帮了大忙。

标签: python pandas dataframe loops pandas-groupby


【解决方案1】:

IIUC,您希望转换每个状态在商店之间的份额。然后你可以groupby“ID”和“状态”,统计每组有多少个店铺,为列变换,除以长度:

df['PCT'] = df.groupby(['ID','STATUS'])['STORE'].transform('count') / df.groupby('ID')['ID'].transform('count')

输出:

       ID  STORE    STATUS   PCT
0  100001      1      zero  0.50
1  100001      2  positive  0.25
2  100001      3      zero  0.50
3  100001      4  negative  0.25
4  100001      5      zero  0.50
5  100001      6      zero  0.50
6  100001      7  positive  0.25
7  100001      8  negative  0.25

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2020-05-13
    • 2021-10-08
    相关资源
    最近更新 更多