Pandas Multiindex - 在小组

时间:2018-05-01 21:37:36

标签: python pandas dataframe multi-index

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

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。

2 个答案:

答案 0 :(得分:3)

chrono.setOnChronometerTickListener(chrono.onChronometerTickListener!!) {} div

一起使用
level

答案 1 :(得分:2)

您需要在groupbytransform然后min

df /= df.groupby(level=0).transform('min')
df

          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

对于整数除法,请将/=替换为//=