我一直被困在一个问题中,我已经完成了所有的groupby操作,并得到了结果数据,如下所示,但是这个问题出现在最后一次计算一个额外列的操作中。
当前数据:
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:
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 -在这里也有帮助,如果我只做群,我将错过category和duration的信息,还有什么更好的方式来表示output df,可以有多个行业,而运营仅限于retail
发布于 2021-12-22 14:13:07
我想不出一次手术。但是通过字典的方式应该是可行的。哦,预先为其他回答者编写代码来创建示例dataframe。
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'])现在我的尝试是:
sums = df[['code', 'count']].groupby('code').sum().to_dict()['count']
df['operation'] = df.apply(lambda x: x['count']/sums[x['code']], axis=1)发布于 2021-12-22 14:41:15
您可以使用groupby.transform()创建一个包含每个代码总数的新列,然后使用loc查找作为其行业‘零售’的行并执行您的部门:
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)印回来:
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 NaNhttps://stackoverflow.com/questions/70450017
复制相似问题