[英]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.