Python Dataframe子集筛选:查询特定日期内首字母A的酒店所属国家
解决步骤
首先确保你的date列是datetime类型(如果尚未转换):
import pandas as pd # 转换date列为datetime格式,避免日期匹配出错 ad['date'] = pd.to_datetime(ad['date'])
1. 组合筛选条件
你需要同时满足两个核心条件:
- 日期严格为2022年1月1日当天
- 酒店名称以字母A开头(默认区分大小写,若要忽略大小写可添加
case=False参数)
组合后的筛选代码如下:
# 构建筛选条件 filter_rules = (ad['date'] == '2022-01-01') & (ad['Hotel Name'].str.startswith('A')) # 获取符合要求的数据集子集 target_data = ad.loc[filter_rules]
2. 统计各国符合条件的酒店数量
对筛选后的数据集按Country列分组,统计每组的酒店数量:
# 按国家分组,统计酒店数量并重置索引 country_hotel_count = target_data.groupby('Country')['Hotel Name'].count().reset_index(name='Hotel_Number')
3. 找出酒店数量最多的国家
通过排序或直接定位最大值的方式获取结果:
# 按酒店数量降序排序 sorted_result = country_hotel_count.sort_values(by='Hotel_Number', ascending=False) # 提取排名第一的国家和数量 top_country = sorted_result.iloc[0]['Country'] top_number = sorted_result.iloc[0]['Hotel_Number'] print(f"2022年1月1日当天,名称以A开头的酒店数量最多的国家是{top_country},共{top_number}家")
也可以用更简洁的写法直接定位最大值:
max_row = country_hotel_count.loc[country_hotel_count['Hotel_Number'].idxmax()] print(f"结果:{max_row['Country']},酒店数量:{max_row['Hotel_Number']}")
内容的提问来源于stack exchange,提问作者Lily Tee
相关产品推荐
相关产品推荐

