熊猫中的数据操作

时间:2020-01-14 06:34:49

标签: python-3.x pandas

我有如下数据:

   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的数字。)

任何人都可以帮助

1 个答案:

答案 0 :(得分:0)

使用GroupBy.transform meansum,除以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