python - 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。
解决方案
与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
推荐阅读
- debugging - 嵌入式 Linux 内核调试
- android - 为什么我在创建表时遇到 sqlit 错误?
- python - 如何在不打开新页面的情况下访问页面的“检查元素”代码
- d3.js - D3以编程方式将html元素附加为子元素
- reactivesearch - ReactiveList 相关搜索
- javascript - 如何在 JavaScript 中应用快速求幂
- android - 为什么要在Activity中添加“向上按钮”时修改Java代码?
- java - 使用equals方法时Android Studio无法处理String中的问号?
- scala - Google 地图绘图在 ScalaFx WebView 中损坏
- firebase - 等待Future的结果
在 Flutter Firestore 中