以前の質問前回質問でもある通り、
データフレーム内のbefore_idというカラムの値を持つ行の次に処理対象の行を移動させようと処理を記述しています。
そこで一旦、pandasの.iterrows()メソッドを使い以下の流れで実装は完了できました。
・データフレームから.iterrows()で各行取得
・before_idがnull以外の行のインデックスを取得
・上記のインデックスに+1下インデックスの位置に処理している行を移動する
ですが、調べていると.iterrows()メソッドはデータ数が多くなると処理が遅くなるなど参考記事、マイナスの意見を見ました。可能であれば、データ数が増えても処理速度を落としたくないです。
またデータフレームを扱う上でfor文を使うと以前に処理にかなり時間がかかった経験もあり、ここも改善できないかと思っております。
もしよりより記述方法やメソッドなどありましたら、ご教授頂きたいです。
コードレビュー的な質問で失礼は承知ですので、質問として不適切な場合もご意見頂ければ幸いです。
よろしくお願いします。
df = pd.read_csv(io.StringIO(client_data), dtype='string', error_bad_lines=False) before = pd.notnull(df['before_id']) for ind,row in df.iterrows(): if pd.notnull(row[2]): #row[2]はbefore_idのカラムを指す before_id = row[2] before_ind = df.index[df['node_id']==before_id] next_ind = before_ind + 1 row.reindex(index=next_ind) else: pass
df node_id,option,before_id 1,A, 4,C,1 5,A,4 2,A,1 3,B,2 8,C,2 6,A, 7,C,6
あなたの回答
tips
プレビュー