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

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

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

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

pandas

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

Q&A

0回答

791閲覧

下記の処理でpandasの.iterrows()またfor文を使わない方法があれば教えて頂きたいです。

amaturePy

総合スコア131

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2021/07/20 04:38

編集2021/07/20 11:24

以前の質問前回質問でもある通り、
データフレーム内の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

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

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

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

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

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

can110

2021/07/20 07:29

> データフレーム内のbefore_idというカラムの値を持つ行の次に処理対象の行を移動させようと処理を記述しています。 やりたいことがいまひとつ理解できません。 処理の結果として得られる行の並びは 「すべての行について、node_idがbefore_idである行よりも下に位置する」という条件を満たすかと思います。 もしそうであるならば、例えば提示されている結果のうち 「3,B,2」は「2,A,1」よりも下に位置しなければならないのではないでしょうか?
amaturePy

2021/07/20 11:23

失礼しました。 おっしゃられてる通り記述ミスでした。 修正しました。
can110

2021/07/20 11:43

まずは前回の質問で提示された入力データが、今回のコードによって提示された結果を出力するでしょうか? こちらで動かした限り、入力データの並びは変わらないようなのですが…
amaturePy

2021/07/20 14:09

失礼しました! 今ほど、上記の順番を少し変えて試したところ、うまく処理されてないようでした。 ある程度量のあるデータで試したため、見間違えてました。
amaturePy

2021/07/20 14:15

before_indにそもそも値が入ってなかったようです。出直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問