这是sample data file,我在ipython笔记本中执行了以下操作:
!curl -O http://pbpython.com/extras/sales-funnel.xlsx
df = pd.read_excel('./sales-funnel.xlsx')
df['Status'] = df['Status'].astype('category')
df["Status"].cat.set_categories(["won","pending","presented","declined"],inplace=True)
table = pd.pivot_table(df,
index=['Manager', 'Status'],
values=['Price', 'Quantity'],
columns=['Product'],
aggfunc={'Price':[np.sum, np.mean], 'Quantity':len},
fill_value=0
)
这是table
中的数据:
我想选择(Manager=="Debra Henley") & (Status=="won")
,它使用query
方法:
但是如何使用loc
执行相同的选择呢?我试过了但没用:
table.loc[['Debra Henley', 'won']]
你们在处理多重索引时通常用什么?最好的办法是什么
更新:目前已找到两个解决方案:
table.xs(('Debra Henley','won'), level=('Manager', 'Status'))
table.loc[[('Debra Henley', 'won')]]
所以我想在用多索引索引索引时应该使用tuples
,而不是{
你的经典答案由@ScottBoston提供。在
除了@jezrael的} 来获取横截面
IndexSlice
方法之外,我还将添加这一点作为广度和视角 您也可以使用^{可以,您可以使用:
要返回熊猫数据帧,或者可以使用:
^{pr2}$还一个熊猫系列。在
您可以参考this文档。在
对于更简单的选择(仅索引或仅列),使用^{} 方法或按
tuples
选择。在另一个更通用的解决方案是slicers:
^{pr2}$
但是,对于更复杂的选择,如果需要将筛选索引和列放在一起,一个
xs
不起作用:相关问题 更多 >
编程相关推荐