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

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

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

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

Q&A

解決済

2回答

599閲覧

Python DataFrameの任意の文字に番号をふりたい

BASEBALL-Y

総合スコア67

Python

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

0グッド

1クリップ

投稿2020/02/12 03:54

##質問内容
以下のデータフレームの"team"に番号をふりたい(1から6まで)のですが,方法が分からないです.
"team"の横に新しく,カラムを追加したいです.
"team"のところを簡単な文字に変えて,教えて頂いても大丈夫です.
よろしくお願いいたします。

##変更例
index team
0 Yomiuri Giants
1 Yomiuri Giants
2 Yomiuri Giants
3 Yomiuri Giants
4 Yomiuri Giants
... ...
451 Yakult Swallows
452 Yakult Swallows
453 Yakult Swallows
454 Yakult Swallows
455 Yakult Swallows


index team       team_num
0 Yomiuri Giants        1
1 Yomiuri Giants        1
2 Yomiuri Giants        1        
3 Yomiuri Giants        1
4 Yomiuri Giants        1
... ...         ・・・
451 Yakult Swallows      6
452 Yakult Swallows      6
453 Yakult Swallows      6
454 Yakult Swallows      6
455 Yakult Swallows      6

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

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

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

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

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

guest

回答2

0

ベストアンサー

手順は

(1) term 列を Category Typeに変換
(2) Category化したterm列よりカテゴリーコード(codes)を取得
(3) 上記の値に1を足す(カテゴリーコードは0から振られるので)
(4) 以上の結果をterm_num列に入れる

です。
このように書くと面倒そうですが、実際は

Python

1df['term_num'] = df['term'].astype('category').cat.codes + 1

の1行で書けます。

一応動作確認

Python

1import pandas as pd 2 3N = 20 4df = pd.DataFrame({ 5 'term': ['termA','termB','termC','termD','termE','termF','termC'] 6}) 7 8df['term_num'] = df['term'].astype('category').cat.codes + 1 9print(df) 10# term term_num 11#0 termA 1 12#1 termB 2 13#2 termC 3 14#3 termD 4 15#4 termE 5 16#5 termF 6 17#6 termC 3

投稿2020/02/12 04:15

magichan

総合スコア15898

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

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

0

キーがチーム名、値が番号のマップで用意し、applyでチーム名から番号を引っ張ってくるようにすればよいです。

Python

1mport pandas as pd 2 3m = {s:i+1 for i,s in enumerate('ABC')} 4print(m) # {'A': 1, 'B': 2, 'C': 3} # チーム名と番号の組み合わせ 5 6df = pd.DataFrame({'team':['A', 'A', 'B', 'C']}) 7df['team_num'] = df['team'].apply( lambda s: m[s]) 8print(df) 9# team team_num 10#0 A 1 11#1 A 1 12#2 B 2 13#3 C 3

なお、既存のデータフレームからチーム名を抽出し番号を振りたいなら以下のような感じで出来ます。

Python

1import pandas as pd 2 3df = pd.DataFrame({'team':['A', 'A', 'B', 'C']}) 4 5# dfからチーム名を抽出して昇順に番号付け 6m = {s:i+1 for i,s in enumerate(sorted(set(df['team'])))} 7print(m) # {'A': 1, 'B': 2, 'C': 3} 8 9df['team_num'] = df['team'].apply( lambda s: m[s]) 10print(df) 11# team team_num 12#0 A 1 13#1 A 1 14#2 B 2 15#3 C 3

投稿2020/02/12 04:06

編集2020/02/12 04:16
can110

総合スコア38341

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問