Cam*_*lon 4 python dataframe pandas
我正在尝试切入具有由IntervalIndex和常规索引组成的MultiIndex的DataFrame.示例代码:
from pandas import Interval as ntv
df = pd.DataFrame.from_records([
{'id': 1, 'var1': 0.1, 'ntv': ntv(0,10), 'E': 1},
{'id':2, 'var1': 0.5, 'ntv': ntv(0,12), 'E': 0}
], index=('ntv', 'id'))
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
E var1
ntv id
(0, 10] 1 1 0.1
(0, 12] 2 0 0.5
Run Code Online (Sandbox Code Playgroud)
我想要做的是以特定值切入DataFrame并返回具有包含该值的间隔的所有行.例如:
df.loc[4]
Run Code Online (Sandbox Code Playgroud)
应该回归(平凡)
E var1
id
1 1 0.1
2 0 0.5
Run Code Online (Sandbox Code Playgroud)
问题是我不断得到一个TypeError关于索引,并且文档显示了一个类似的操作(但在单级索引上)确实产生了我正在寻找的东西.
TypeError: only integer scalar arrays can be converted to a scalar index
Run Code Online (Sandbox Code Playgroud)
我尝试了很多东西,似乎没有什么能正常工作.我可以id在数据框中包含该列,但我宁愿保持我的索引唯一,我会不断地调用set_index('id').
我觉得要么a)我缺少关于MultiIndexes的东西,或者b)在MultiIndex中使用IntervalIndex存在错误/歧义.
由于我们正在说出间隔,因此有一种方法get_loc可以查找具有间隔之间值的行.说出我的意思:
from pandas import Interval as ntv
df = pd.DataFrame.from_records([
{'id': 1, 'var1': 0.1, 'ntv': ntv(0,10), 'E': 1},
{'id':2, 'var1': 0.5, 'ntv': ntv(0,12), 'E': 0}
], index=('ntv', 'id'))
df.iloc[(df.index.get_level_values(0).get_loc(4))]
E var1
ntv id
(0, 10] 1 1 0.1
(0, 12] 2 0 0.5
df.iloc[(df.index.get_level_values(0).get_loc(11))]
E var1
ntv id
(0, 12] 2 0 0.5
Run Code Online (Sandbox Code Playgroud)
如果您有一个inteval的多行数据,这也适用
df = pd.DataFrame.from_records([
{'id': 1, 'var1': 0.1, 'ntv': ntv(0,10), 'E': 1},
{'id': 3, 'var1': 0.1, 'ntv': ntv(0,10), 'E': 1},
{'id':2, 'var1': 0.5, 'ntv': ntv(0,12), 'E': 0}
], index=('ntv', 'id'))
df.iloc[(df.index.get_level_values(0).get_loc(4))]
E var1
ntv id
(0, 10] 1 1 0.1
3 1 0.1
(0, 12] 2 0 0.5
Run Code Online (Sandbox Code Playgroud)
如果你用列表理解来计算时间,这种方法对于大型数据帧来说更快,即
ndf = pd.concat([df]*10000)
%%timeit
ndf.iloc[ndf.index.get_level_values(0).get_loc(4)]
10 loops, best of 3: 32.8 ms per loop
%%timeit
intervals = ndf.index.get_level_values(0)
mask = [4 in i for i in intervals]
ndf.loc[mask]
1 loop, best of 3: 193 ms per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
419 次 |
| 最近记录: |