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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

484閲覧

データフレームで特定の条件を満たす行のみを抽出したい

_hh

総合スコア79

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/17 07:07

Pandasのデータフレームの処理についてお尋ねします。
1つめの図の様なデータフレームで、'R値'という列の値が'A'の行のみを抽出した、新しいデータフレーム
'df_AA'を作成したいのですが、2つ目の図のコマンドをうつと、出力の様に
元のデータフレームの枠組みのまま、'NAN'か'A'が表示されたデータフレームに
なってしまいます。原因と対策につき、ご教示下さい。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問のコードで合っていると思います。
記載されたような現象はこちらでは確認できません。

python

1import pandas as pd 2 3df = pd.DataFrame({'顧客ID': [1001, 1002, 1004, 1005, 1006], 4 'R値': ['A', 'C', 'B', 'B', 'A'], 5 'F値': ['A', 'A', 'A', 'A', 'A'], 6 'M値': ['A', 'A', 'A', 'B', 'B']}) 7df2 = df[df['R値'] == 'A'] 8df2
F値 M値 R値 顧客ID 0 A A A 1001 1 A A C 1002 2 A A B 1004 3 A B B 1005 4 A B A 1006

F値 M値 R値 顧客ID 0 A A A 1001 4 A B A 1006

投稿2019/05/17 07:18

tiitoi

総合スコア21956

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

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

_hh

2019/05/17 07:22

不思議です。こちらでは他の属性についても同様でして、例えば df_AA= df_RFM_ranked[ df_RFM_ranked['顧客ID'] == 1001 ] df_AA.head() としますと同様に元の枠組みのまま、'NaN'か'1001'の値のみのデータフレームが表示されます。。
_hh

2019/05/17 07:22

コメント有難うございます。
tiitoi

2019/05/17 07:25 編集

回答のコードをコピペして実行してもそうなりますか? もしならないのであれば、質問欄に貼ってあるコードより前の行に原因がある可能性もあるので、画像ではなくテキストでコード全体を貼ってください。
_hh

2019/05/17 07:36

大変有難うございます。しかし、この前の部分は長いのと、大容量のファイルを読み込んで行っておりますのでここでは控えさせて頂きます。ポイントとしては、元となるデータフレームからpivot_tableを作成しているのと、それをpd.concatしております。一応 concat以降のコードは以下となります。 df_RFM_ranked = pd.concat([df_25_pivot_R_ranked,df_25_pivot_F_ranked,df_25_pivot_M_ranked],axis=1) df_RFM_ranked = df_RFM_ranked.reset_index() '顧客ID'の列は、pivot_tableではindexとしていたものなのですが、それが原因かと思い、reset_indexして列名にしておりました。上記の情報のみとなってしまいますが、もし何か分かりましたらで構いません。
_hh

2019/05/17 07:37

ご提示頂いたコードは、こちらで実行したところ、ご提示頂いている通りの結果でした。
tiitoi

2019/05/17 08:13

回答のコードではそのような現象は起きないとすると、データフレーム df_RFM_ranked を作った過程が原因ということになりますが、上記の情報だけではどのようなデータフレームかということがわからないため、原因について回答するのは難しいです。
_hh

2019/05/17 10:59

有難うございます。ちなみに print(df_RFM_ranked.columns) とすると、 MultiIndex(levels=[['F値', 'M値', 'R値', '顧客ID']], labels=[[3, 2, 0, 1]]) となりました。
bsdfan

2019/05/17 12:11

MultiIndexになっているんでしたら、df_RFM_ranked['R値']はSeriesではなく、DataFrameなんですかね。df_AA= df_RFM_ranked[ df_RFM_ranked[('R値',)] == 'A' ] とかでできるんではないでしょうか。 可能ならば、columnsをセットしなおすのが良いと思います。
_hh

2019/05/17 12:52

できました!大変有難うございます。
_hh

2019/05/17 12:52

df_AA= df_RFM_ranked[ df_RFM_ranked[('R値',)] == 'A' ] の方法でできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問