使用データ
# 使用データ
df
| name | room_type | |
|---|---|---|
| 0 | ホテルA | スーペリアツインルーム禁煙 |
| 1 | ホテルB | スーペリアツインルーム喫煙 |
| 2 | ホテルC | デラックスツインルーム |
| 3 | ホテルD | スタンダードツインルーム禁煙 |
| 4 | ホテルE | ダブルルーム |
| 5 | ホテルF | デラックスダブルルーム禁煙 |
| 6 | ホテルG | スタンダードツインルーム禁煙 |
| 7 | ホテルH | デラックスキングルーム |
このようなものを用意しました。
Goal
room_typeに'スーペリア'、'デラックス'と名前がつくものに1、そうでないものに0を付与した新しいカラムを生成する。
実施事項
new_room_type_list = []
for i in range(8):
if 'スーペリア' in df['room_type'][i]:
a = 1
elif 'デラックス' in df['room_type'][i]:
a = 1
else:
a = 0
new_room_type_list.append(a)
このようにしてlistを作成
その後dfに追加する。
# dfに作成したnew_room_type_listをdf['new_room_type']として追加する。
df['new_room_type'] = new_room_type_list
確認してみる
df
| name | room_type | new_room_type | |
|---|---|---|---|
| 0 | ホテルA | スーペリアツインルーム禁煙 | 1 |
| 1 | ホテルB | スーペリアツインルーム喫煙 | 1 |
| 2 | ホテルC | デラックスツインルーム | 1 |
| 3 | ホテルD | スタンダードツインルーム禁煙 | 0 |
| 4 | ホテルE | ダブルルーム | 0 |
| 5 | ホテルF | デラックスダブルルーム禁煙 | 1 |
| 6 | ホテルG | スタンダードツインルーム禁煙 | 0 |
| 7 | ホテルH | デラックスキングルーム | 1 |
こんな感じでうまく追加することができた。
おまけ:.str.contains()の使用
df['room_type'].str.contains('スーペリア')
0 True
1 True
2 False
3 False
4 False
5 False
6 False
7 False
Name: room_type, dtype: bool
このようにどの行に'スーペリア'が出てくるなどはわかるが、.str.contains()はDataFrame全体に及ぶものなので1行1行をみていくif文などには向かないと判断したため上記の方法を用いた