我正在寻找一种解决方案来获得结果,例如“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
感谢您的帮助!
答案 0 :(得分:2)
您可以将列除以每个 colC
的 colA
的总和,其大小与原始 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