table
が列MultiIndex持っているように見えます:
In [178]: table.columns
Out[178]:
MultiIndex(levels=[['sum'], ['All', 'Female', 'Male']],
labels=[[0, 0, 0], [1, 2, 0]],
names=[None, 'sex'])
あなたtable
の列にアクセスするには:あなたのtable
はマルチインデックスがtable.columns
を検査することで、列を持っているかどうかを確認するために
sum
Sex Female Male All
1つの方法MultiIndexの各レベルの値を指定する必要があります。
したがって、
、Male
列を選択するには、sum
レベルが不要ですので、あなたが
In [176]: table[('sum', 'Male')]
Out[176]:
date
April 42.0
August 34.0
December 32.0
...
を使用することになり、あなたはdf.pivot
やdf.pivot_table
を呼び出すときvalues
パラメータを指定することによって、それを取り除くことができます。例えば
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
、sum
レベルを除去する
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'])
別の方法はtable = table['sum']
、 又はtable.columns = table.columns.droplevel(0)
を使用することであろう。
ありがとうございました!正確に何を探しています。しかし、合計レベルを取り除いた後でも、 'table.query( 'Sex ==" Male "')'を実行しても、まだ受け取ったりエラーになったりします。 'pandas.core.indexing.IndexingError:Unalignable boolean Series key provided'が出てきます。これの原因は何ですか? – Kyuu
クエリ文字列 '' Sex == "Male"は、 '' Male "'とマッチする 'True'のブール値の系列、' 'res''として(' 'table.query'の中で)評価されますとても良い。しかし、 'table.query'はブール値のシリーズ' res'を使って 'table'を' table.loc [res] 'で索引付けします。失敗した場合は' table [res] '](https:// github .com/pydata/pandas/blob/master/pandas/core/frame.py#L2150)。これらはどちらも 'res'を使って* columns *ではなくtableの* rows *を選択しようとするので失敗します。 'Male'カラムを選択するには' table [( 'sum'、 'Male')] 'または' table2 ['Male'] 'を使います。 – unutbu