🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

pandas

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

Q&A

解決済

2回答

1944閲覧

【pandas】複数条件でデータを書き換える

jfnflnfl

総合スコア9

Python

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

pandas

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

0グッド

0クリップ

投稿2019/09/06 04:08

python初心者になります。
PANDASのデータの前処理でまったくコードが浮かばず、調べても該当するものが探せず、お力をお借りしたくお願いいたします。

以下のような元データに対して、以下のルールで対象データを更新したいと思っています。

【更新ルール】

対象データの列1が、列2に判定結果で書き換える
A(条件)だったらAAA(判定結果)
B(条件)だったらBBB(判定結果)
C(条件)だったらCCC(判定結果)

この条件と結果の組が上記のように3つぐらいであれば、私の現状の技術でも一つ一つの条件毎にデータを更新してしまえばよいのですが、
条件と結果の組が大量にあり、一つ一つ書き換えることができません。

条件と結果のセットを辞書型にして、対象データを書き換えられたらと思っているのですが、何かよい方法はありませんでしょうか。
よろしくお願いいたします。

【対象データ】

列1列2
ANaN
ANaN
ANaN
BNaN
BNaN
CNaN
CNaN
ANaN
BNaN
ANaN

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

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

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

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

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

guest

回答2

0

{'A':'AAA', 'B':'BBB', 'C':'CCC'}

の様な、変換用の dict型のデータを作成しておき、Series.map() を使用して変換をするのが簡単かと思います。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html

Python

1import pandas as pd 2import numpy as np 3 4# 適当なデータを生成 5N = 10 6df = pd.DataFrame({'列1': np.random.choice(['A','B','C','D','E'],N)}) 7# 変換用のデータ 8conv = {'A':'AAA', 'B':'BBB', 'C':'CCC', 'D':'DDD', 'E':'EEE'} 9# 変換 10df['列2'] = df['列1'].map(conv) 11print(df) 12# 列1 列2 13#0 C CCC 14#1 C CCC 15#2 A AAA 16#3 D DDD 17#4 D DDD 18#5 B BBB 19#6 E EEE 20#7 E EEE 21#8 A AAA 22#9 D DDD

投稿2019/09/06 04:23

magichan

総合スコア15898

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

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

magichan

2019/09/06 04:24

あっ。被りました。すみません
jfnflnfl

2019/09/06 04:42

ベストアンサーは最初にご回答が早かった方にさせていただきましたが、mapの使い方が良くわかり、勉強になりました!どうもありがとうございました!!
guest

0

ベストアンサー

回答

条件と結果のセットを辞書型にして、対象データを書き換えられたらと思っているのですが、何かよい方法はありませんでしょうか。

Series.replace にキーを変更前の値、値を変更後のものとした辞書を渡すことでその辞書に従って値を変換できます。

コード

python

1import pandas as pd 2 3df = pd.DataFrame({"Col1": ["A", "A", "A", "B", "B", "C", "C", "A", "B", "A"]}) 4print(df) 5 6d = {"A": "AAA", "B": "BBB", "C": "CCC"} 7df["Col2"] = df["Col1"].replace(d) 8 9print(df) 10# Col1 Col2 11# 0 A AAA 12# 1 A AAA 13# 2 A AAA 14# 3 B BBB 15# 4 B BBB 16# 5 C CCC 17# 6 C CCC 18# 7 A AAA 19# 8 B BBB 20# 9 A AAA

Series.map を使う方法

条件式で変更後の値を決定したい場合は Series.map を使用する方法もあります。

python

1import pandas as pd 2 3df = pd.DataFrame({"Col1": [1, 2, 3, 4, 5, 6, 7, 8, 9]}) 4print(df) 5# Col1 6# 0 1 7# 1 2 8# 2 3 9# 3 4 10# 4 5 11# 5 6 12# 6 7 13# 7 8 14# 8 9 15 16def func(x): 17 if x % 2 == 0: 18 return "Even" 19 else: 20 return "Odd" 21 22df["Col2"] = df["Col1"].map(func) 23 24print(df) 25# Col1 Col2 26# 0 1 Odd 27# 1 2 Even 28# 2 3 Odd 29# 3 4 Even 30# 4 5 Odd 31# 5 6 Even 32# 6 7 Odd 33# 7 8 Even 34# 8 9 Odd

投稿2019/09/06 04:18

編集2019/09/06 04:22
tiitoi

総合スコア21956

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

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

jfnflnfl

2019/09/06 04:37

的確なご回答ありがとうございます!!助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問