python - pd.IndexSlice 列表
问题描述
输入 :
midx = pd.MultiIndex.from_product([['A0','A1'], ['B0','B1','B2','B3']])
columns = ['foo', 'bar']
t = pd.DataFrame(np.arange(16).reshape((len(midx), len(columns))),
index=midx, columns=columns)
输出:
In [6]: t
Out[6]:
foo bar
A0 B0 0 1
B1 2 3
B2 4 5
B3 6 7
A1 B0 8 9
B1 10 11
B2 12 13
B3 14 15
问题:
让v = pd.IndexSlice['A0','B0':'B1']
. 我可以访问t.loc[v,:]
:
In [13]: t.loc[v,:]
Out[13]:
foo bar
A0 B0 0 1
B1 2 3
从[v,v]
,我怎样才能得到以下数据框?
In [13]: f([v,v])
Out[13]:
foo bar
A0 B0 0 1
B1 2 3
B0 0 1
B1 2 3
我无法指定这些多索引切片器的列表:t.loc[[v,v],:]
将引发 Exception: Unashable type: 'slice'
。为什么会这样?使用标量时,我可以轻松列出所需的位置:t.loc[[('A0','B0'),('A0','B1')],:]
.
解决方案
使用鲜为人知且未使用axis=0
的参数loc
:
您还可以将轴参数指定给 .loc 以解释在单个轴上传递的切片器。
t.loc(axis=0)[v]
输出:
foo bar
A0 B0 0 1
B1 2 3
根据更新的评论和问题澄清解决:
pd.concat([t.loc[v,:]]*2)
输出:
foo bar
A0 B0 0 1
B1 2 3
B0 0 1
B1 2 3
推荐阅读
- python - 防止 VSCode 在 bash 历史记录中保存 python 调试器命令
- java - 在调用超类型构造函数之前无法引用它 + 消费者
- angular - mat-select selectionChange 获取组角度
- javascript - 如何从 Javascript 中的 html 标签中检索信息?
- javascript - 如何在 Highcharts 中为多个系列使用相同的数据集?
- python - 如何使用补丁装饰器模拟 Django 内部库
- forms - Winform图表标签位置错误
- vaadin - 使用 VAADIN 在 PayBox 上付款后如何返回主页?
- azure - Powershell 计算 azure CLI 结果
- c# - WPF Office 加载项:如何设置对话框位置以显示在父窗口的中心