如何过滤数据透视表以返回特定列。目前我的数据框是这样的:
print table
sum
Sex Female Male All
Date (Intervals)
April 166 191 357
August 212 263 475
December 173 263 436
February 192 298 490
January 148 195 343
July 189 260 449
June 165 238 403
March 165 278 443
May 236 253 489
November 167 247 414
October 185 287 472
September 175 306 481
All 2173 3079 5252
我只想显示男性列的结果。我尝试了以下代码:
table.query('Sex == "Male"')
但是我收到了这个错误
TypeError: Expected tuple, got str
我如何能够使用指定的行或列来过滤我的表格。
最佳答案
看起来table
有一列MultiIndex :
sum
Sex Female Male All
检查table
是否具有MultiIndex列的一种方法是检查table.columns
:
In [178]: table.columns
Out[178]:
MultiIndex(levels=[['sum'], ['All', 'Female', 'Male']],
labels=[[0, 0, 0], [1, 2, 0]],
names=[None, 'sex'])
要访问表
的列,您需要为MultiIndex的每个级别指定一个值:
In [179]: list(table.columns)
Out[179]: [('sum', 'Female'), ('sum', 'Male'), ('sum', 'All')]
因此,要选择男性
列,您可以使用
In [176]: table[('sum', 'Male')]
Out[176]:
date
April 42.0
August 34.0
December 32.0
...
由于 sum
级别是不必要的,因此您可以通过在调用 df.pivot
或 时指定
。 values
参数来摆脱它>df.pivot_table
table2 = df.pivot_table(index='date', columns='sex', aggfunc='sum', margins=True,
values='sum')
# sex Female Male All
# date
# April 40.0 40.0 80.0
# August 48.0 32.0 80.0
# December 48.0 44.0 92.0
例如,
import numpy as np
import pandas as pd
import calendar
np.random.seed(2016)
N = 1000
sex = np.random.choice(['Male', 'Female'], size=N)
date = np.random.choice(calendar.month_name[1:13], size=N)
df = pd.DataFrame({'sex':sex, 'date':date, 'sum':1})
# This reproduces a table similar to yours
table = df.pivot_table(index='date', columns='sex', aggfunc='sum', margins=True)
print(table[('sum', 'Male')])
# table2 has a single level Index
table2 = df.pivot_table(index='date', columns='sex', aggfunc='sum', margins=True,
values='sum')
print(table2['Male'])
删除 sum
级别的另一种方法是使用 table = table['sum']
,
或table.columns = table.columns.droplevel(0)
。
关于python - 如何在Python上过滤数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37366208/