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

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

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

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

pandas

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

Q&A

解決済

1回答

1954閲覧

pandasにおける日付をもとにした置換

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

pandas

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

0グッド

1クリップ

投稿2017/10/28 13:59

DataFrame A

dateCD
1990-01-01a2
1990-01-02b4
1991-01-03c3
1990-02-07b4
1990-04-11v6

DataFrame B

dateCE
1990-01-01ddd12
1990-02-01ggg41
1990-03-01jjj33

上のような2つデータフレームがあります。

データフレームAのdateとデータフレームBのdateの**「年と月」が同じ場合**、
データフレームAのCを、データフレームBのCの値で置換したいです。

置換後は以下のようになります。

DataFrame A

dateCD
1990-01-01ddd2
1990-01-02ddd4
1991-01-03c3
1990-02-07ggg4
1990-04-11v6

どのようにして実装できるでしょうか。

回答よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

DataFrame ADataFrame Byearmonth の column を追加し、この columnを使用して、df.update() もしくは pd.merge() を行うとよいと思います。

以下に df.update()を使用したサンプルを書いてみましたので参考にしてください。

Python

1import pandas as pd 2 3# df_A を生成 4df_A = pd.DataFrame( 5 [['1990-01-01', 'a', 2], 6 ['1990-01-02', 'b', 4], 7 ['1991-01-03', 'c', 3], 8 ['1990-02-07', 'b', 4], 9 ['1990-04-11', 'v', 6]], columns=['date', 'C', 'D']) 10df_A['date'] = pd.to_datetime(df_A['date']) 11 12# df_B を生成 13df_B = pd.DataFrame( 14 [['1990-01-01', 'ddd', 12], 15 ['1990-02-01', 'ggg', 41], 16 ['1990-03-01', 'jjj', 33]], columns=['date', 'C', 'E']) 17df_B['date'] = pd.to_datetime(df_B['date']) 18 19# df_A に 'year' と 'month' のColumnを追加 20df_A['year'] = df_A.date.dt.year 21df_A['month'] = df_A.date.dt.month 22 23# df_B に 'year' と 'month' のColumnを追加 24df_B['year'] = df_B.date.dt.year 25df_B['month'] = df_B.date.dt.month 26 27# df_Aに対し 'year' と 'month' をindex に設定した df_left を作成 28df_left = df_A.set_index(['year', 'month']) 29 30# df_Bに対し 'year' と 'month' をindex に設定した df_right を作成 31# また、df_leftの 'date'を上書きしないように削除しておく 32df_right = df_B.set_index(['year', 'month']).drop('date', axis=1) 33 34# df_right を df_left にて update() 35df_left.update(df_right) 36 37# index('year', 'month')をリセットして削除 38result = df_left.reset_index(drop=True) 39print(result)

投稿2017/10/30 10:07

magichan

総合スコア15898

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問