<p>我认为循环将产生更可读的代码:</p>
<pre><code>data = []
for idx, row in df.iterrows():
room_types = pd.Series(row['RoomType'].split(','))
room_floors = row['RoomFloor'].split(',')
room_prices = row['RoomPrice'].split(',')
mapping = dict(zip(room_types.unique(), room_floors))
room_floors = room_types.map(mapping)
for rm_type, rm_floor, rm_price in zip(room_types, room_floors, room_prices):
data.append((row['HotelName'], rm_type, rm_floor, rm_price))
pd.DataFrame(data, columns=['HotelName', 'RoomType', 'RoomFloor', 'RoomPrice'])
Out[56]:
HotelName RoomType RoomFloor RoomPrice
0 Hotel1 Standard 10F 100
1 Hotel1 Standard 10F 105
2 Hotel1 Standard 10F 108
3 Hotel1 Deluxe 20F 200
4 Hotel1 Deluxe 20F 205
5 Hotel2 Standard 30F 90
6 Hotel2 Standard 30F 95
7 Hotel2 Deluxe 40F 250
8 Hotel2 Deluxe 40F 240
9 Hotel2 Grande 50F 300
</code></pre>
<p>它遍历数据帧的行,并为每个酒店生成房间类型、房间楼层和房间价格的列表。<code>mapping = dict(zip(room_types.unique(), room_floors))</code>板条箱是房间类型和房间楼层之间的映射。使用这个映射,<code>room_floors = room_types.map(mapping)</code>创建一个长度相等的列表。既然<code>room_types</code>、<code>room_floors</code>和<code>room_prices</code>具有相同的长度,您就可以对它们进行迭代,并将每个记录添加为一个元组。最后,最后一行将元组列表转换为整洁的数据帧。你知道吗</p>