如何在Python中按相同入住和退房日期分组统计日期数据?
按入住/退房日期分组统计数据的Python实现方法
我希望基于相同的**入住日期(check in date)和退房日期(check out date)**对数据进行分组统计。
示例数据
import pandas as pd guess = [1, 2, 3, 4, 5] check_in = ['17/07/2021', '17/07/2021','17/07/2021', '18/07/2021','18/07/2021'] check_out = ['20/07/2021', '20/07/2021','22/07/2021', '24/07/2021', '24/07/2021' ] data = pd.DataFrame({'guess':guess, 'check in date': check_in, 'check out date': check_out}) print(data)
模拟数据结构如下:
| guess | check in date | check out date | |
|---|---|---|---|
| 0 | 1 | 17/07/2021 | 20/07/2021 |
| 1 | 2 | 17/07/2021 | 20/07/2021 |
| 2 | 3 | 17/07/2021 | 22/07/2021 |
| 3 | 4 | 18/07/2021 | 24/07/2021 |
| 4 | 5 | 18/07/2021 | 24/07/2021 |
期望分组结果
按相同入住、退房日期分组后,以统计每组记录数为例,期望得到如下结果:
| check in date | check out date | count |
|---|---|---|
| 17/07/2021 | 20/07/2021 | 2 |
| 17/07/2021 | 22/07/2021 | 1 |
| 18/07/2021 | 24/07/2021 | 2 |
可用的Python实现方法
1. Pandas groupby 方法(最常用)
Pandas是处理表格数据的首选工具,直接通过groupby指定分组列,再结合聚合函数即可完成统计:
# 按入住+退房日期分组,统计每组记录数 grouped_data = data.groupby(['check in date', 'check out date']).count().reset_index() # 重命名统计列(可选) grouped_data = grouped_data.rename(columns={'guess': 'count'}) print(grouped_data)
如果需要对guess列执行其他聚合操作(比如求和),替换count()为对应的函数即可:
# 统计每组guess的总和 grouped_sum = data.groupby(['check in date', 'check out date'])['guess'].sum().reset_index()
2. Pandas pivot_table 方法
透视表适合更复杂的多维度聚合场景,同样可以实现需求:
pivot_data = pd.pivot_table( data, index=['check in date', 'check out date'], values='guess', aggfunc='count' ).reset_index().rename(columns={'guess': 'count'}) print(pivot_data)
3. 原生Python实现(无第三方库依赖)
如果不想依赖Pandas,可以用字典手动完成分组统计:
from collections import defaultdict group_dict = defaultdict(int) # 遍历每行数据,按日期组合计数 for _, row in data.iterrows(): date_key = (row['check in date'], row['check out date']) group_dict[date_key] += 1 # 转换为易读的列表格式 result = [ {'check in date': key[0], 'check out date': key[1], 'count': value} for key, value in group_dict.items() ] print(result)
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

