我有如下数据:
col1 col2
A 0
A 1
B 0
A 0
C 1
B 1
C 0
我喜欢它,如下:
col1 col2 col3 col4
A 0 .33 .33
A 1 .33 .33
B 0 .5 .33
A 0 .33 .33
C 1 .5 .33
B 1 .5 .33
C 0 .5 .33
颜色1是值的类别。第2列是事件,即0 =否,1 =是。 第3栏应为该类别的事件发生率,即 (类别具有值1的次数/该类别的总发生次数) 第4列应为该类别的事件份额,即 (该类别在所有类别中具有值1 /总1的次数, 例如,A的第4列应为A中的1的数字除以A,B和C类别中的总1的数字。)
任何人都可以帮助
答案 0 :(得分:0)
使用GroupBy.transform
mean
和sum
,除以1
中所有df['col2']
的总和来进行二次除法:
df['col3'] = df.groupby('col1')['col2'].transform('mean')
df['col4'] = df.groupby('col1')['col2'].transform('sum').div(df['col2'].sum())
print (df)
col1 col2 col3 col4
0 A 0 0.333333 0.333333
1 A 1 0.333333 0.333333
2 B 0 0.500000 0.333333
3 A 0 0.333333 0.333333
4 C 1 0.500000 0.333333
5 B 1 0.500000 0.333333
6 C 0 0.500000 0.333333
另一个由GroupBy.agg
汇总的解决方案:
df = df.join(df.groupby('col1')['col2'].agg([('col3','mean'),('col4','sum')])
.assign(col4 = lambda x: x['col4'].div(df['col2'].sum())), on='col1')
print (df)
col1 col2 col3 col4
0 A 0 0.333333 0.333333
1 A 1 0.333333 0.333333
2 B 0 0.500000 0.333333
3 A 0 0.333333 0.333333
4 C 1 0.500000 0.333333
5 B 1 0.500000 0.333333
6 C 0 0.500000 0.333333