繁体   English   中英

熊猫Multiindex-在组上执行操作

[英]Pandas Multiindex - Perform Operation on Group

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

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,如果有帮助的话。

level使用div

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

您需要groupby ,然后对min进行transform

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

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

暂无
暂无

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

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