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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

pandas

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

Q&A

解決済

3回答

306閲覧

おおもとのデータから特定のIDを抽出したいです!!!

Pablito

総合スコア71

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2019/08/15 03:34

編集2019/08/16 05:52

前提・実現したいこと

購買と顧客データを使ってJupyter Notebook上でデータ加工をしています。
現在は、特定したターゲットIDを使って、
おおもとのデータから、ターゲット外のIDを削除したいと考えています。
しかし、明らかに構文が悪いと思うのですが、
以下のエラーが発生しました。

発生している問題・エラーメッセージ

ValueError Traceback (most recent call last) <ipython-input-58-d216038b1202> in <module> 1 #分析対象の購買データを抽出 2 #まずは対象のIDを抽出 ----> 3 whole[whole['cst_id'] == ppl['cst_id']] c:\users\lib\site-packages\pandas\core\ops\__init__.py in wrapper(self, other, axis) 1140 1141 elif isinstance(other, ABCSeries) and not self._indexed_same(other): -> 1142 raise ValueError("Can only compare identically-labeled " "Series objects") 1143 1144 elif is_categorical_dtype(self): ValueError: Can only compare identically-labeled Series objects

該当のソースコード

Python

1whole[whole['cst_id'] == ppl['cst_id']]

wholeがおおもとのデータで、pplがターゲットIDを絞ったデータセットです。
wholeの中のcst_idの中で、pplの中のcst_idと一致するものだけを抽出するイメージです。

###試したこと
meg_さんのご指導に基づき、
whole[whole['cst_id'].map(lambda x: x in ppl['cst_id'].tolist())]
で試してみたのですが、実行に時間がかかりすぎてしまい
うまく解決しません。
他のコードを書いたら実行できるので、
書き方の問題だと思うのですが、
他に案がある方はいらっしゃいますでしょうか?

何卒ご教示のほど、
宜しくお願い致します。

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

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

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

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

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

guest

回答3

0

whole['cst_id'] とppl['cst_id']のデータ数(行数)が異なるのでしょう。

下記のようなコードで実現できそうです。

Python

1df1[df1['A'].map(lambda x: x in df2['C'].tolist())]

投稿2019/08/15 03:55

編集2019/08/15 04:07
meg_

総合スコア10579

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

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

Pablito

2019/08/15 05:02

meg_さん ご回答ありがとうございます。 上記のコードを実行してみたのですが、 このコードだけ処理に相当な時間がかかってしまい、 作業が先に進まなくなってしまいました。 これは環境が原因なのか、 コードが元データと合っていないのか 分かりかねるのですが、 どう思われますか???
meg_

2019/08/15 05:11

wholeのデータは何件(何行)ありますか? 上記コードですと毎回「df2['C'].tolist())」の部分を実行するので件数多いと特に効率悪いですね。 先にこの部分をリストにしておいたら多少早くなりませんか? あるいは、やり方を変えて各IDと一致するデータをwholeから抽出して結合する方が早いかもしれません。
Pablito

2019/08/15 05:16

wholeは959004行あります。 自分には後者のやり方の方が分かりやすそうなので、 後者のやり方に挑戦してみます。
guest

0

自己解決

まず、pplのIDだけ抜き取って
それをwholeとinner mergeすることで
解決しました。

ID = ppl[['cst_id']]
ds = pd.merge(whole, ID, how='inner', on='cst_id')

投稿2019/08/16 06:03

Pablito

総合スコア71

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

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

0

google翻訳
ValueError: 同じラベルのSeriesオブジェクトのみを比較できます

と言ってますが、双方の変数のナカミを確認してみては。

投稿2019/08/15 03:39

y_waiwai

総合スコア87747

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問