任务详情
根据下方给出的全国旅游景点数据,完成以下任务:
- 使用 Pandas 读取全国旅游景点数据文件,使用 id 列作为索引;
- 去掉景点级别(level)字段(列)中数据的“景区”二字,字段中数据是 ‘\N’ 的情况不进行处理。如:‘4A景区’->‘4A’;
- 添加新的字段(列)‘city’,表示景点所在的省、市或自治区。比如:‘北京’,‘上海’,'江苏’等;
- 去掉所有的免费景点(price=0);
- 计算景点的销售额(price * sales),如果同一省、直辖市或自治区内的多个景点销售额相同,保留索引较小的景点,去掉其余景点;
- 添加新的字段(列)rank,对相同省、直辖市或自治区的景点的销售额进行排名操作(降序),并将排名结果添加到新的字段(列)rank 中,销售额较大的景点排名靠前;
- 注意:DataFrame 字段只包括:title,place,level,address,price,sales,city,rank 字段(列),索引为 id 字段(列)。
任务要求
- 程序不接收输入变量,返回结果的数据类型为 ‘pandas.DataFrame’;
- 全国旅游景点数据是以逗号分割的 csv 文件,utf-8编码;
- 提示:完成任务后,数据还剩 8 列 8991 条。
任务实现
import pandas
class Solution:
def tripdata_process() -> 'pandas.DataFrame':
url = "http://ws1.itmc.org.cn:80/JS00101/data/user/4799/85/fj_1844_scenic_spot.csv"
# 读取数据,设置id列为行标签
data = pandas.read_csv(url, sep=",", index_col=0)
# 去掉景区级别列中的景区二字
data["level"] = data["level"].str.strip("景区")
# 添加city列,并截取内容填充
data["city"] = data["place"].map(lambda x: x.split("·")[0])
# 去掉所有免费景点
data.drop(data[data["price"] == 0].index, inplace=True)
# 添加临时汇总列
data["jine"] = data["price"] * data["sales"]
# 去掉同省市销售额相同的景点,只保留索引较小的景点
data.drop_duplicates(subset=["city", "jine"], keep="first", inplace=True)
# 根据省市、销售额排序
data = data.sort_values(by=["city", "jine"], ascending=[True, False])
# 添加排行列,根据省市排行
data["rank"] = data["jine"].groupby(data["city"]).rank(ascending=False)
# 删除临时列
data.drop("jine", axis=1, inplace=True)
return data
print(Solution.tripdata_process())