python - Pandas 如何对 MultiIndex 进行条件选择

标签 python pandas

这是 sample data file , 我在 ipython notebook 中执行了以下操作:

!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
              )

这是数据在中的样子:

enter image description here

我想选择 (Manager=="Debra Henley") & (Status=="won") 并且它使用 query 方法:

table.query('(Manager=="Debra Henley") & (Status=="won")')

但是如何使用 loc 执行相同的选择?我试过这个但不起作用:

table.loc[['Debra Henley', 'won']]

大家在处理MultiIndex的时候一般用什么?最好的方法是什么?


更新:目前找到两个解决方案:

table.xs(('Debra Henley','won'), level=('Manager', 'Status'))
table.loc[[('Debra Henley', 'won')]]

所以我想在使用 MultiIndex 建立索引时应该使用 tuples 而不是 lists

最佳答案

您的规范答案由@ScottBoston 提供。

除了@jezrael 的IndexSlice 方法之外,我将添加它以增加广度和视角。
您也可以使用 pd.DataFrame.xs截取横截面

table.xs(['Debra Henley', 'won'])

                Product    
Quantity  len   CPU                1
                Maintenance        0
                Monitor            0
                Software           0
Price     mean  CPU            65000
                Maintenance        0
                Monitor            0
                Software           0
          sum   CPU            65000
                Maintenance        0
                Monitor            0
                Software           0
Name: (Debra Henley, won), dtype: int64

关于python - Pandas 如何对 MultiIndex 进行条件选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43037362/

相关文章:

python - 无法在 pygame 中正确执行射弹操作

python - Pandas 数据框定位

python - 为什么将 DatetimeIndex 转换为 np.array 时格式会发生变化?

python - 在colab中上传 "EmptyDataError"文件时如何解析 ".csv"?

python - 检查组是否包含 Pandas 中的相同值

python - 从 Heroku 上托管的 Django 应用程序发送电子邮件,附件存储在 AWS S3 中

javascript - Python json.dump() 到 javascript JSON.parse()

python - 在 argparse 中接受来自命令行的字符串类型列表

python - 如何使用 PIL 获取图像大小(字节)

python - 将 DataFrame 的列设置为 pandas 中另一个列的总和