首页 > 解决方案 > Pandas Multiindex - 对组执行操作

问题描述

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

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”,以获得如下结果:

          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。

标签: pythonpandasdataframemulti-index

解决方案


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

推荐阅读