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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

pandas

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

Q&A

1回答

740閲覧

isinで共通キーを元に2つのデータフレームから別のデータフレームを抽出する際に特定の条件を追加したい

kitaru

総合スコア21

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

pandas

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

0グッド

0クリップ

投稿2022/04/26 10:18

前提・実現したいこと

isinで共通キーを元に2つのデータフレームから別のデータフレームを抽出する際に特定の条件を追加したいです。

例えば、下記のような2つのデータフレームがあります

【A】
顧客番号  注文日
0  101   2019/01/01
1  102   2020/01/01
2  103   2020/01/01
3  104   2020/01/01
4  105   2020/01/01
5  106   2020/01/01

【B】
顧客番号  注文日
0  101   2020/01/01
1  222   2020/06/01
2  103   2021/01/01
3  333   2020/08/01
4  101   2021/01/01
5  103   2022/01/01

上記2つのデータフレームから下記のコードで【C】をつくります。
df_C = df_A[df_A['顧客番号'].isin(df_B['顧客番号'])].copy()

【C】
顧客番号  注文日
0  101   2019/01/01
1  101   2020/01/01
2  101   2021/01/01
3  103   2020/01/01
4  103   2021/01/01
5  103   2022/01/01

ただ、注文日は【B】を起点(一番最初)としたいため
【A】の「0 101 2019/01/01」は除外して出力結果を下記のようにしたいです。

【C】
顧客番号  注文日
0  101   2020/01/01
1  101   2021/01/01
2  103   2020/01/01
3  103   2021/01/01
4  103   2022/01/01

使っているツールのバージョンなど補足情報

Google Colaboratory

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

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

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

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

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

guest

回答1

0

python

1import pandas as pd 2import numpy as np 3import io 4 5pd.set_option('display.unicode.east_asian_width', True) 6 7df_A_csv = ''' 8顧客番号,注文日 9101,2019/01/01 10102,2020/01/01 11103,2020/01/01 12104,2020/01/01 13105,2020/01/01 14106,2020/01/01 15''' 16 17df_B_csv = ''' 18顧客番号,注文日 19101,2020/01/01 20222,2020/06/01 21103,2021/01/01 22333,2020/08/01 23101,2021/01/01 24103,2022/01/01 25''' 26 27df_A = pd.read_csv(io.StringIO(df_A_csv)) 28df_B = pd.read_csv(io.StringIO(df_B_csv)) 29 30# 31clients = np.intersect1d(df_A['顧客番号'], df_B['顧客番号']) 32df_C = pd.concat([ 33 df_A[df_A['顧客番号'].isin(clients)], df_B[df_B['顧客番号'].isin(clients)] 34]).sort_values('顧客番号').iloc[1:,:].reset_index(drop=True) 35 36print(df_C) 37 38# 39 顧客番号 注文日 400 101 2020/01/01 411 101 2021/01/01 422 103 2020/01/01 433 103 2021/01/01 444 103 2022/01/01

投稿2022/04/26 11:04

melian

総合スコア21118

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

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

kitaru

2022/04/27 00:49

ありがとうございます! こちら、ilocで行番号1番目を指定して除外して頂いていると思うのですが 【C】の中で各顧客番号に対して【B】より以前の【A】データは除外(【Bを起点とする】)などの 条件設定は可能でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問