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

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

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

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

Q&A

解決済

2回答

306閲覧

[python] 新規列に条件に合うデータを追加したい

mango55

総合スコア22

Python

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

0グッド

0クリップ

投稿2023/02/19 06:57

実現したいこと

下記のようなdataframeで条件にあうデータを追加したいです
(都道府県列を判定してエリア列に該当のエリアを追加)

|ID|日付|種別|都道府県|エリア| ←エリアを新規列
|1111|2022/1/1|新規|東京 |関東|
|2222|2022/1/1|新規|神奈川|関東|
|3333|2022/1/2|変更|大阪 |大阪|

該当のソースコード

python

1import pandas as pd 2import numpy as np 3 4df_test = pd.DataFrame({'ID': [1111, 2222, 3333], 5 '日付': [2022/1/1, 2022/1/1, 2022/1/2], 6 '種別': ['新規', '新規', '変更'], 7 都道府県': ['東京', '神奈川', '大阪']}) 8 9①の方法 10adict = pd.DataFrame({'都道府県': ['東京','神奈川','大阪'], 11 'エリア': ['関東','関東','大阪']}) 12df = pd.concat([df_test, adict]) 13df.assign(area = lambda x:np.where(x["都道府県"] == df['都道府県'], df['エリア'],0)) 14 15-------------------------------------------------------- 16②の方法 17bdict = ({'都道府県': ['東京','神奈川','大阪'], 'エリア': ['関東','関東','大阪']}) 18for k, v in bdict.items(): 19 if (row.'都道府県' == k): 20 return v 21

試したこと

①、②の方法を考えましたが実現が上手く出来ず、ご指摘を頂きたいです。

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

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

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

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

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

guest

回答2

0

キーを都道府県mergeすればよいかと思います。

Python

1import pandas as pd 2import numpy as np 3 4df_test = pd.DataFrame({'ID': [1111, 2222, 3333], 5 '日付': [2022/1/1, 2022/1/1, 2022/1/2], 6 '種別': ['新規', '新規', '変更'], 7 '都道府県': ['東京', '神奈川', '大阪']}) 8 9# ①の方法 10adict = pd.DataFrame({'都道府県': ['東京','神奈川','大阪'], 11 'エリア': ['関東','関東','大阪']}) 12 13df = df_test.merge(adict, on='都道府県') 14print(df) 15""" 16 ID 日付 種別 都道府県 エリア 170 1111 2022.0 新規 東京 関東 181 2222 2022.0 新規 神奈川 関東 192 3333 1011.0 変更 大阪 大阪 20"""

投稿2023/02/19 07:13

can110

総合スコア38262

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

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

melian

2023/02/19 07:29

merge のデフォルトは inner join なので how='left' を付けておくと良いかと。
mango55

2023/02/19 07:30

早々のお返事ありがとうございます。実現出来ました。 今回は先にご回答頂いた方をベストアンサーとさせて頂き、すみません。様々な実現方法を教えて頂き、勉強になります。 いつもありがとうございます。
guest

0

ベストアンサー

python

1import pandas as pd 2 3df_test = pd.DataFrame({'ID': [1111, 2222, 3333], 4 '日付': ['2022/1/1', '2022/1/1', '2022/1/2'], 5 '種別': ['新規', '新規', '変更'], 6 '都道府県': ['東京', '神奈川', '大阪']}) 7adict = pd.DataFrame({'都道府県': ['東京','神奈川','大阪'], 8 'エリア': ['関東','関東','大阪']}) 9 10df_test['エリア'] = df_test['都道府県'].map(adict.set_index('都道府県')['エリア']) 11print(df_test)
ID日付種別都道府県エリア
11112022/1/1新規東京関東
22222022/1/1新規神奈川関東
33332022/1/2変更大阪大阪

投稿2023/02/19 07:08

melian

総合スコア19749

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

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

mango55

2023/02/19 07:28

早々のお返事ありがとうございます。実現出来ました。 勉強になりました。いつもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問