繁体   English   中英

我如何将分组的屏蔽 id 除以另一个 df 中的值(df 包含每个屏蔽 id 的值)

[英]how can i divide grouped masked id by a value that is in another df (the df contains a value for each masked id )

df = pd.DataFrame([[1,'A', 4], [1,'B', 2], [2,'C', 5], [2,'A', 5], [3,'B', 2]],
                  columns=['maskedid ', 'test  ', 'value'])

    maskedid test  value
     1        A      4
     1        B      2
     2        C      5
     2        A      5
     3        B      2 

我想按 'maskedid' 和 'test' 分组并运行 .describe () 我为了找到计数并将计数输出除以来自另一个数据帧的值。 #每个被屏蔽的 id 都有自己的值。

df 具有以下值

maskedid value 
 1        5      
 2        6      
 3        7      

我的理解是您想要生成.describe()信息并划分由其他数据帧 ( df2 ) 生成的数据。 你可以这样实现:

df.groupby(['maskedid', 'test']).describe()


              value                                  
              count mean std  min  25%  50%  75%  max
maskedid test                                        
1        A      1.0  4.0 NaN  4.0  4.0  4.0  4.0  4.0
         B      1.0  2.0 NaN  2.0  2.0  2.0  2.0  2.0
2        A      1.0  5.0 NaN  5.0  5.0  5.0  5.0  5.0
         C      1.0  5.0 NaN  5.0  5.0  5.0  5.0  5.0
3        B      1.0  2.0 NaN  2.0  2.0  2.0  2.0  2.0

然后,除以df2匹配的maskedid为:

df.groupby(['maskedid', 'test']).describe().div(df2.set_index('maskedid')['value'], axis=0, level=0)

结果:

                  value                                                                
                  count      mean std       min       25%       50%       75%       max
maskedid test                                                                          
1        A     0.200000  0.800000 NaN  0.800000  0.800000  0.800000  0.800000  0.800000
         B     0.200000  0.400000 NaN  0.400000  0.400000  0.400000  0.400000  0.400000
2        A     0.166667  0.833333 NaN  0.833333  0.833333  0.833333  0.833333  0.833333
         C     0.166667  0.833333 NaN  0.833333  0.833333  0.833333  0.833333  0.833333
3        B     0.142857  0.285714 NaN  0.285714  0.285714  0.285714  0.285714  0.285714

使用的输入

df = pd.DataFrame([[1,'A', 4], [1,'B', 2], [2,'C', 5], [2,'A', 5], [3,'B', 2]],
                  columns=['maskedid', 'test', 'value'])

   maskedid test  value
0         1    A      4
1         1    B      2
2         2    C      5
3         2    A      5
4         3    B      2


df2 = pd.DataFrame({'maskedid': [1, 2, 3], 'value': [5, 6, 7]})

   maskedid  value
0         1      5
1         2      6
2         3      7

如果我理解正确,您可以简单地合并 df 和 df2(另一个数据帧)、groupby maskedid 并计算您的组长度除以另一个数据帧的值:

(df.merge(df2, on='maskedid')
   .groupby('maskedid', as_index=False)
   .apply(lambda x: len(x)/x['value_y'])
)

输出:

0  0    0.400000
   1    0.400000
1  2    0.333333
   3    0.333333
2  4    0.142857

注意。 我在这里只按 'maskedid' 分组,否则只会有 1 组,但您可以按 ['maskedid', 'test'] 分组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM