前提・実現したいこと
※カラム名とデータの内容はぼかしています。
既存のデータフレーム構成が次のようになっています。Col_1はint型、Col_2はstr型ですがNaNも含みます。左端の数字はindexになります。
Col_1 Col_2 0 1 a,b,c 1 2 a,d 2 3 NaN 3 4 e
このCol_2の文字列がカンマ区切りになっているので、分解して次のようなデータフレームにしたいです。NaNのものは省きます。
Col_1 Col_2 0 1 a 1 1 b 2 1 c 3 2 a 4 2 d 5 4 e
前者のデータフレームをdf_A, 後者をdf_Bとしてソースを記載します。
この処理をiterrows
のメソッドで書いているのですが、df_Aの方が20万行程度あり、実行に非常に時間がかかっていて困っています。高速化する方法はないでしょうか?高速化に関して何かアイデアがありましたら、ご教授ください。
該当のソースコード
現在使っているソースコードです。
Python
1import pandas as pd 2# 得たいデータフレーム 3df_B = pd.DataFrame(index=[], columns=['Col_1', 'Col_2']) 4 5# 元のデータのデータフレーム df_Aをループしてdf_Bを作っていく 6for index, row in df_A.iterrows(): 7 if row['Col_1'] is not np.nan: 8 for c1 in row['Col_1'].split(','): 9 record = pd.Series([row['Col_1'], c1], index=['Col_1', 'Col_2']) 10 df_B = df_B.append(record, ignore_index=True) 11
補足情報
Google検索もして調べてみたのですが、既存のデータフレームから新しくデータフレームを作るような方法での高速化がなかなか見当たりませんでした。自分の検索の仕方が悪いのかもしれませんが解決できなかったのでお知恵をお貸しください。
Pandasは最新のものを使用しています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/02 08:24 編集