Skip to main content
 首页 » 编程设计

python之Pandas Multiindex之对组执行操作

2025年05月04日21Free-Thinker

我有一个多索引数据框,我想根据其中一列的最小值对每个组执行操作。例如:

import pandas as pd 
d={'name':['foo','foo', 'foo', 'bar', 'bar', 'bar','baz', 'baz'], 
   'grp':[1, 2, 4, 1, 4, 8, 2, 4],  
   'val':[50, 100, 200, 25, 100, 200, 75, 150]} 
df = pd.DataFrame(data=d) 
df.set_index(['name', 'grp'], inplace=True) 
df 

给我一​​个这样的数据框:

          val 
name grp 
foo  1     50 
     2    100 
     4    200 
bar  1     25 
     4    100 
     8    200 
baz  2     75 
     4    150 

我想做的是根据“grp”中的最低值对每个“grp”分组的每个值执行操作。例如,通过将组中的每个值除以最低值来归一化每个“val”,得到如下所示:

          val 
name grp 
foo  1     50  1 
     2    100  2 
     4    200  4 
bar  1     25  1 
     4    100  4 
     8    200  8 
baz  2     75  1 
     4    150  2 

请注意,计算是在“val”列上执行的,但基于最小“grp”数字的“val”值。我正在努力寻找一种循环遍历此方法的好方法,因此感谢您的指点。 如果它有所作为,我正在使用 Python v3.6。

请您参考如下方法:

使用 div 和 level

df.div(df.min(level=[0]),level='name') 
Out[157]:  
          val 
name grp      
foo  1    1.0 
     2    2.0 
     4    4.0 
bar  1    1.0 
     4    4.0 
     8    8.0 
baz  2    1.0 
     4    2.0