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

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

新規登録して質問してみよう
ただいま回答率
86.12%
マージ

複数のデータベースやファイル、プログラムなどを決まった手順や規則に従って一つに結合すること。

Python 3.x

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

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

解決済

Pythonで2つの大量のデーターフレームを高速にマージさせていきたい。

pritu
pritu

総合スコア7

マージ

複数のデータベースやファイル、プログラムなどを決まった手順や規則に従って一つに結合すること。

Python 3.x

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

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

1回答

0リアクション

0クリップ

660閲覧

投稿2021/08/04 10:26

google colaboratoryの環境下で2つのデーターフレームをマージさせていますが、
あまりにも処理が遅くて困っております。
1600くらいなら気にならない速さなのですが、
一つのカラムをマージさせるのに36万行だと1時間ほどかかっています。
これだと大量のカラムをマージさせるの時間がかかってしまいますので、
知恵を貸していただきたく質問投稿しました。

【元となるデーターフレーム】
・36万行ほど。
・インデックスは日付。

【マージさせるデーターフレーム】
・インデックスは日付。
・元となるデーターフレームとは要素のインデックス数が少ない。

自分が考えたコードは以下になります。

Python

#データーフレームの数 N = len(df) N1 = len(df1) #空のNumpty配列を準備。 r = np.arange(N).reshape((-1,1)) df['カラム'] = np.arange(N).reshape((-1,1)) #データがない箇所はNaN。 df['カラム] = 'NaN' for i in range(0,N1): mon = df1.index[i].month day = df1.index[i].day hor = df1.index[i].hour minut = df1.index[i].minute kalum = df1['カラム'][i] for i1 in range(0,N): if df.index[i1].month >= mon and df.index[i1].day >= day and df.index[i1].hour >= hor and df.index[i1].minute: df['カラム'][i1:N] = kalum

このコードだと1時間ほどかかり、
スタートする日付(変化)から最後の行まで代入というのを繰り返しているので、
2度手間で処理が遅いのかなと思っております。

もっとスマートで計算処理が早い方法がありましたら、
ご教授よろしくお願い致します。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

meg_

2021/08/04 11:23

dfとはpandas.DataFrameのことですよね?pandasの機能でマージ出来ないデータ構造なのでしょうか?
bsdfan

2021/08/04 11:29 編集

日付データを、month, day, hour, minuteで別々に比較する理由はありますか? 年と秒は無視したいとか?
pritu

2021/08/04 12:36

meg_さん。 はい、dfは、pandas.DataFrameのことです。言葉足らずですいません。 ちなみに、csvファイルから読み込んだデータフレームです。 pandasの機能で、pandas.mergeというのがありますが、データーフレームのインデックス数?が同じ数じゃないとできなかったんですよね。
meg_

2021/08/04 12:42 編集

> pandasの機能で、pandas.mergeというのがありますが、データーフレームのインデックス数?が同じ数じゃないとできなかったんですよね。 何かエラーが出たのでしょうか? ppaulさんの回答ではマージ出来ませんか?
pritu

2021/08/04 12:42

bsdfanさん。 年ごとにcsvファイルがありまして、 年は比較しなくていいかなと思い比較していません。 比較しても処理速度変わらないと思うのでつけてもいいとは思いますが、つけてないだけですね! 2つのデーターフレームの同じ日付のインデックスを合わせて1つのカラムをつけ足していきたいんですよね。 データーフレームに欠損値もあるのでどうするほうがスマートかわからなく・・・。
pritu

2021/08/04 12:51

他の追加したいデータに、 例えば、 1月1日 0.8 3月8日 0.5 というデータがあって、 1つのデータに1月1日~3月7日まで同じ0.8の値を代入して、3月8日~〇月〇日まで、0.5の値を代入したい「カラム」があったりもします。
pritu

2021/08/04 13:09

> pandasの機能で、pandas.mergeというのがありますが、データーフレームのインデックス数?が同じ数じゃないとできなかったんですよね。 何かエラーが出たのでしょうか? >マージを実行する共通の列がありません。とエラーが出てました。
meg_

2021/08/04 13:19

>>マージを実行する共通の列がありません。とエラーが出てました。 コードや実際のエラーメッセージがないので何とも言えませんね。 pandasに対してループ処理はよほどのことがない限りしないかと思います。サンプルデータを提示いただくことが解決への近道かと思います。
bsdfan

2021/08/04 13:59

解決済みになりましたが、 df = pd.merge_asof(df, df1, left_index=True, right_index=True) でもできると思います。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

マージ

複数のデータベースやファイル、プログラムなどを決まった手順や規則に従って一つに結合すること。

Python 3.x

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

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。