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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

pandas

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

Q&A

解決済

1回答

1959閲覧

データフレームのカラムどうしの掛け算について

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

pandas

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

0グッド

0クリップ

投稿2018/08/16 14:13

編集2018/08/16 14:13

前提・実現したいこと

Pythonで
具体的には、カラム0と1をもつデータフレーム(df)から、カラム0と1をかけた値を格納したカラム2が作成したいです。

カラム0と1をもつデータフレーム(df)から

100|3 200|6 500|2

カラム2

300 1200 1000

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

実行するとエラーメッセージが出ずに無限ループに入ってしまいます。

該当のソースコード

python

1import pandas as pd 2#掛け算で算出する列を追加 3df[2] = [x * y for x in df[0] for y in df[1]] 4print(df)

試したこと

teratailにあった似た質問を参考にして以下の2つも試してみましたが、エラーが出てしまいました。

1

python

1df[2]= df[0] * df[1] 2print(df)

エラー

File "<ipython-input-14-65ea26aa6a0f>", line 3 df[2]= df[0] * df[1] ^ SyntaxError: invalid character in identifier

2

python

1df2 = df.assign(2 = df[0]*df[1])

エラー

File "<ipython-input-15-98d6344e7f7a>", line 1 df2 = df.assign(2 = df[0]*df[1]) ^ SyntaxError: keyword can't be an expression

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

Python 3.6.0 :: Anaconda 4.3.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1[x * y for x in df[0] for y in df[1]]

これは内包表記ではない形で書くと

python

1result = [] 2for x in df[0]: 3 for y in df[1]: 4 result.append(x*y)

というループです。

無限ループになるということはないと思いますが、ある程度データの件数があれば、いくら待てども遅すぎて返って来ないというのはあり得ること(O(n^2)なので・・・)でしょう。

こういう方法で書きたければ、

python

1[x*y for x,y in zip(df[0], df[1])]

と計算してdf[2]に代入してください。

python

1df[2]= df[0] * df[1]

はイコールのあとに全角スペースが入っています。それを直せば期待通り動くと思います。

python

1df2 = df.assign(2 = df[0]*df[1])

は、pythonは数字から始まる変数名を定義できない仕様なので(今回はキーワード引数ですが、広い意味で変数名の一種と思ってください)、動作しません。


エラー原因の情報はエラーメッセージに出ますので、よく読んで確認してください。

あと、空白文字(半角スペース、tab、全角スペース等)を見分けられるように表示してくれるエディタを使いましょう。更に、構文チェックや静的解析等で支援してくれる機能があるとなおよしです。

投稿2018/08/16 14:20

編集2018/08/16 14:27
hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2018/08/16 14:26

ご回答いただきましてありがとうございます。 解決しました。
hayataka2049

2018/08/16 14:31

SyntaxErrorのときは質問する前にコードを読み直したりググったりして、構文が間違っていないかよく確認しましょう。
退会済みユーザー

退会済みユーザー

2018/08/17 00:56

追記いただきましてありがとうございます。 現在、Sublime Textを使用しているのですが、空白文字(半角スペース、tab、全角スペース等)を見分けられるように表示してくれるエディタでおすすめのものがありましたら、教えていただけますと幸いです。
hayataka2049

2018/08/17 01:18

それなら設定変更でできますね。手順も検索で出てくるようです
退会済みユーザー

退会済みユーザー

2018/08/17 02:23

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問