大熊猫按两列分组的百分比

时间:2021-03-30 12:11:00

标签: python pandas

我正在寻找一种解决方案来获得结果,例如“colA 的结果百分比”列。例如,该值表示一月 (colA) 中猫 (colB) 与一月中猫和狗的百分比。

import pandas as pd

# set up dataframe
df_ex = pd.DataFrame({'colA':['2021-01-31', '2021-01-31', '2021-01-31', '2021-02-28', 
                              '2021-02-28', '2021-02-28', '2021-03-31', '2021-03-31'],
                   'colB':['cat', 'cat', 'dog', 'cat', 'dog', 'cat', 'cat', 'dog'],
                   'colC':[1,2,3,4,4,5,6,7], })
df_ex = df_ex.groupby(['colA', 'colB']).sum() 
df_ex = df_ex.reset_index() 
df_ex['result percent of colA'] = [0.5, 0.5, 0.69, 0.31, 0.46, 0.54] #expecte result

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以将列除以每个 colCcolA 的总和,其大小与原始 GroupBy.transform 相同:

df_ex['perc'] = df_ex['colC'].div(df_ex.groupby('colA')['colC'].transform('sum')).round(2)

print (df_ex)
         colA colB  colC  perc
0  2021-01-31  cat     3  0.50
1  2021-01-31  dog     3  0.50
2  2021-02-28  cat     9  0.69
3  2021-02-28  dog     4  0.31
4  2021-03-31  cat     6  0.46
5  2021-03-31  dog     7  0.54

详情

print (df_ex.groupby('colA')['colC'].transform('sum'))
0     6
1     6
2    13
3    13
4    13
5    13
Name: colC, dtype: int64