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

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

詳細はこちら
Python 3.x

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

pandas

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

Q&A

解決済

2回答

572閲覧

pandas.Seriesのmapの内部処理

gjgjgjgjg

総合スコア14

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2020/01/07 03:32

mapには関数をいれるものだと思うのですが、
この場合は変数(encoding)が代入されています。
関数が代入されている場合は、データフレームの各要素が関数の引数として渡されるイメージが付くのですが、
今回のように変数が渡されていたらどのような処理になるのでしょうか?
またここら辺の挙動がどうなっているかを勉強するにはどうすればよいでしょうか?
よろしくお願いします。

python

1### FREQUENCY ENCODING 2 3# size of each category 4encoding = titanic.groupby('Embarked').size() 5# get frequency of each category 6encoding = encoding/len(titanic) 7titanic['enc'] = titanic.Embarked.map(encoding) 8 9# if categories have same frequency it can be an issue 10# will need to change it to ranked frequency encoding 11from scipy.stats import rankdata

↓の2. Frequency Encodingの掲載箇所にコードが記載してあります。
参考webページ

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

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

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

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

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

guest

回答2

0

ベストアンサー

この変数encodingは Series です。
pd.Series.map()に Series や dict が渡された場合、「キー→値」の置換処理が行われます。

pandas.Series.map — pandas 0.25.3 documentation

実際に動かしてみるのが良いでしょう

Python

1import pandas as pd 2import seaborn as sns 3 4df = sns.load_dataset("titanic") 5encoding = df.groupby('embarked').size() / len(df) 6 7print(df['embarked']) 8# 0 S 9# 1 C 10# 2 S 11# 3 S 12# 4 S 13# .. 14# 886 S 15# 887 S 16# 888 S 17# 889 C 18# 890 Q 19# Name: embarked, Length: 891, dtype: object 20 21print(encoding) 22# embarked 23# C 0.188552 24# Q 0.086420 25# S 0.722783 26# dtype: float64 27 28print(df['embarked'].map(encoding)) 29# 0 0.722783 30# 1 0.188552 31# 2 0.722783 32# 3 0.722783 33# 4 0.722783 34# ... 35# 886 0.722783 36# 887 0.722783 37# 888 0.722783 38# 889 0.188552 39# 890 0.086420 40# Name: embarked, Length: 891, dtype: float64

投稿2020/01/07 04:35

kirara0048

総合スコア1399

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

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

gjgjgjgjg

2020/01/07 08:02

ありがとうございます! 確かにdocumentに辞書、series方なら対応した値をmapすると書いてますね。 実際に動かすの大切ですねー
guest

0

リファレンスを見てみましょう。

Series.map(self, arg, na_action=None)[source]
Map values of Series according to input correspondence.

Used for substituting each value in a Series with another value, that may be derived from a function, a dict or a Series.

Parameters:
arg : function, dict, or Series
Mapping correspondence.

pandas.Series.map — pandas 0.25.3 documentation

argには割と色々なものを渡せることがわかります。別に関数に限られないということですね。

Seriesを渡した場合の挙動はこんな感じです。

python

1>>> import pandas as pd 2>>> mapping = pd.Series([10, 20, 30], index=["hoge", "fuga", "piyo"]) 3>>> ser = pd.Series(["hoge", "fuga", "piyo"]) 4>>> ser.map(mapping) 50 10 61 20 72 30 8dtype: int64

投稿2020/01/07 04:32

hayataka2049

総合スコア30935

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問