首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在groupby之后执行唯一的行操作。

在groupby之后执行唯一的行操作。
EN

Stack Overflow用户
提问于 2021-12-22 13:42:11
回答 2查看 37关注 0票数 -1

我一直被困在一个问题中,我已经完成了所有的groupby操作,并得到了结果数据,如下所示,但是这个问题出现在最后一次计算一个额外列的操作中。

当前数据:

代码语言:javascript
复制
code        industry               category     count     duration
2       Retail                      Mobile        4         7
3       Retail                      Tab           2         33
3       Health                      Mobile        5         103
2       Food                         TV           1         88

问题:想要一个额外的列operation来计算特定code栏条目的行业“零售”计数比率

例如:代码2有2个industry条目,零售和食品,因此operation列应该有值4/(4+1) = 0.8,对于代码3也应该具有类似的值,如下所示

O/P:

代码语言:javascript
复制
code        industry               category     count     duration  operation
2       Retail                      Mobile        4         7         0.8
3       Retail                      Tab           2         33        -
3       Health                      Mobile        5         103       2/7 = 0.285
2       Food                         TV           1         88        -

在这里也有帮助,如果我只做群,我将错过categoryduration的信息,还有什么更好的方式来表示output df,可以有多个行业,而运营仅限于retail

EN

回答 2

Stack Overflow用户

发布于 2021-12-22 14:13:07

我想不出一次手术。但是通过字典的方式应该是可行的。哦,预先为其他回答者编写代码来创建示例dataframe。

代码语言:javascript
复制
st_l = [[2,'Retail','Mobile', 4, 7],
       [3,'Retail', 'Tab', 2, 33],
       [3,'Health', 'Mobile', 5, 103],
       [2,'Food', 'TV', 1, 88]]
df = pd.DataFrame(st_l, columns= 
     ['code','industry','category','count','duration'])

现在我的尝试是:

代码语言:javascript
复制
sums = df[['code', 'count']].groupby('code').sum().to_dict()['count']
df['operation'] = df.apply(lambda x: x['count']/sums[x['code']], axis=1)
票数 0
EN

Stack Overflow用户

发布于 2021-12-22 14:41:15

您可以使用groupby.transform()创建一个包含每个代码总数的新列,然后使用loc查找作为其行业‘零售’的行并执行您的部门:

代码语言:javascript
复制
df['total_per_code'] = df.groupby(['code'])['count'].transform('sum')
df.loc[df.industry.eq('Retail'), 'operation'] = df['count'].div(df.total_per_code)

df.drop('total_per_code',axis=1,inplace=True)

印回来:

代码语言:javascript
复制
  code industry category  count  duration  operation
0     2   Retail   Mobile      4         7   0.800000
1     3   Retail      Tab      2        33   0.285714
2     3   Health   Mobile      5       103        NaN
3     2     Food       TV      1        88        NaN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70450017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档