首页 > 解决方案 > 我如何将分组的掩码 id 除以另一个 df 中的值(df 包含每个掩码 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      

标签: pythonpandasdataframepandas-groupby

解决方案


我的理解是你想生成.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

推荐阅读