質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

5073閲覧

pandas でのgroupbyした後のフィルタリングや参照

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2018/03/04 05:36

pandasの使い方がおかしいかもしれないのでそうであった場合指摘してくださるとありがたいです

python

1quantity = data.groupby(['Retailer country', 'Year', 'Product type'])['Quantity'].sum() 2revenue = data.groupby(['Retailer country', 'Year', 'Product type'])['Revenue'].sum() 3 4df = pd.DataFrame({'Quantity' : quantity, 'Revenue' : revenue}) 5df = df.loc['United States']

これあるデータからQuantity,Revenueそれぞれの合計のシリーズからDataFrameを生成したものなのですが

python

1''' 2 Quantity Revenue 3Year Product type 42012 Binoculars 45250 5244041.91 5 Climbing Accessories 275046 3843823.21 6 Cooking Gear 557640 11234915.19 7 Eyewear 958778 38649157.55 8... 92014 Binoculars 42881 5571199.91 10 Climbing Accessories 358452 4800881.44 11 Cooking Gear 455717 8984366.21 12 Eyewear 922067 43449153.73

この状態から元のデータフレームのカラムであったYearなどでフィルターする方法はありますでしょうか
例えばYearが2014の値のものだけ取り出したいのですがやり方が分からず困っています

また、別の例を挙げると

python

1quantity = data.groupby(['Retailer country', 'Product type', 'Year'])['Quantity'].sum() 2print(quantity['United States']) 3

これはgroupbyしてそれぞれのデータのQuantityの合計を出したのですが

python

1''' 2Product type Year 3Binoculars 2012 45250 4 2013 53861 5 2014 42881 6...

ここからYear が2014の値のものだけ取り出したいのですがやり方が分かりません
また、なぜ

python

1quantity['United States']

これは取り出せるのに同じやり方でさらにフィルタして取り出そうとするとErrorが起きるのか、教えていただけるとありがたいです
よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

今回のようにgroupby()で複数のデータ指定するすると、出力されるデータのIndexは階層をもったIndex(MultiIndex)となり、質問で挙げたコードの場合は 'Retailer country' がトップレベルのIndex、'Year'が第2レベル, 'Product type' が第3レベルとなっております。

今回 中間レベル(Second Level)のIndexであるYear にて指定を行いたいということですので、 xs() にLevelを指定して

df.xs(2014, level=1)

のように指定するとよいかと思います。

投稿2018/03/05 01:30

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/05 05:21

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問