我一直遇到一個問題,我已經完成了所有 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如下所示
開/關:
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 -
幫助在這里同樣,如果我只是GROUPBY,我會錯過的資訊category,并duration也什么是代表更好的方式output df可以有多種了業界和操作只限于retail
uj5u.com熱心網友回復:
我想不出一個單一的操作。但是通過字典的方式應該有效。哦,提前為其他回答者提供創建示例資料幀的代碼。
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)
uj5u.com熱心網友回復:
您可以使用 來創建一個包含每個代碼總數的新列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 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/390636.html
標籤:蟒蛇-3.x 熊猫 数据框 pandas-groupby
