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

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

ただいまの
回答率

90.33%

  • Python 3.x

    7441questions

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

  • pandas

    682questions

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

Pythonでデータフレームでの繰り返し処理の方法を知りたい。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 686

monlly

score 6

前提・実現したいこと

レベルがかなり低いことを承知で質問します。
pandasで読み込んだCSVをデータフレーム化した後の繰り返し処理についての質問です。
私がやりたいことは以下のような処理です。
csvのC列1行目÷A列1行目をし、列で繰り返し処理をした後、D列1行目÷A列1行目の処理、E列1行目÷A列1行目・・・というように、A列固定で割り算を繰り返していく処理をしたいです。

発生している問題・エラーメッセージ

該当のソースコード

ここにご自身が実行したソースコードを書いてください

試したこと

補足情報(言語/FW/ツール等のバージョンなど)

Python3系

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • namnium1125

    2017/09/26 00:59

    発生した問題等を書いていただきたいです。今のままだと「〜したい」ということしか書いておらず、他の回答者様から「やってほしいことだけを記載した丸投げの質問」であると言われかねません。投稿後も編集できますから、もう少し形を整えてみてはいかがでしょうか?

    キャンセル

回答 2

checkベストアンサー

+2

計算した結果は、元の場所に書き戻すのでよいのでしょうかね?

とりあえず

C列1行目÷A列1行目をし、列で繰り返し処理をした後

この部分は特に繰り返し処理を行う必要がなく、単に df['C'] / df['A'] と記述するだけで全ての列を計算を行い、結果が1次配列(Series) で戻ります。
ですので、結果をそのままC列に書き戻すのであれば、

df['C'] = df['C'] / df['A']


のように記述してください。同様に他の列も

df['D'] = df['D'] / df['A']
df['E'] = df['E'] / df['A']
# 以下繰り返し


のように記述することで、目的が達せられるかと思います。

しかし上記のようにC列~F列の計算を全て併記するのはかったるいので、ループで処理で行いたいというのであれば、方法はいくつか有りますが、単にカラム名のリストを使って

for name in ['C','D','E','F']:
    df[name] = df[name] / df['A']


が一番簡単です。

また、for name in df: のように記述すると、全てのカラム名でループすることができますので、A列だけ除外して

for name in df:
    if name == 'A':
        continue
    df[name] = df[name] / df['A']

のように記述することもできます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/26 12:43 編集

    dfごと回せたんですね。。(^ ^;
    勉強になりました。
    m(_ _)m

    キャンセル

  • 2017/09/26 20:02

    お二人のおかげで、私がやりたかったことが全てできました!
    ありがとうございました!

    あと、分かりづらい質問で失礼いたしました。
    質問の仕方の勉強にもなりました。

    キャンセル

+1

とりあえず質問者様が書いてくださった内容をもとに勝手に回答してみます。

csvのC列1行目÷A列1行目をし、列で繰り返し処理をした後、

の部分について、具体的な列での繰り返し処理の内容を下さらなかったので、すべて割り算と判断しました。

回答したコードは

  • C〜D列1行 ÷ A列1行 = C〜D列1行答え
  • C〜D列2行 ÷ A列2行 = C〜D列2行答え
  • C〜D列3行 ÷ A列3行 = C〜D列3行答え



    を求めるものです。

「そうではなくこういうことがしたいんです」や、「ここってどういう意味ですか?」と言いたくなるようなことがあれば、返信ください。m(_ _)m

import pandas as pd

# csvファイルの読み込み
testDf = pd.read_csv("test.csv")

# ここでは以下のようなファイルを読み込んだとする
"""test.csv
   A     B  C  D  E  F
0  1  hoge  3  2  1  2
1  7  hoge  1  7  4  2
2  3  hoge  4  1  1  3
3  2  hoge  1  8  4  6
4  0  hoge  5  2  2  0
5  5  hoge  9  8  1  6
6  0  hoge  2  1  3  7
7  8  hoge  6  8  5  9
8  0  hoge  5  2  6  7
"""

# 結果を格納するための辞書
resultDic = {"C":[],
             "D":[],
             "E":[],
             "F":[]}

for i,rw_A in enumerate(testDf["A"]): # iに行数、rw_A(A列の1行)に分母
    if rw_A != 0:
        for col in resultDic.keys():
            # 質問者様の要望(列ごとの繰り返し)には沿っていないが、行ごとに割り算を実行(行ごとに繰り返し)
            resultDic[col].append(testDf[col][i]/rw_A)

    else: # 分母が0の時はNaNを代入
        for col in resultDic.keys():
            resultDic[col].append("NaN")

# 結果からDataFrameを作成
resultDf = pd.DataFrame(resultDic)
# csvファイルにセーブ
resultDf.to_csv("result.csv")

"""result.csv
          C         D         E         F
0         3         2         1         2
1  0.142857         1  0.571429  0.285714
2   1.33333  0.333333  0.333333         1
3       0.5         4         2         3
4       NaN       NaN       NaN       NaN
5       1.8       1.6       0.2       1.2
6       NaN       NaN       NaN       NaN
7      0.75         1     0.625     1.125
8       NaN       NaN       NaN       NaN
"""

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • Python 3.x

    7441questions

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

  • pandas

    682questions

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