如何在pandas中按多列及datetime类型列的日期部分实现数据分组
解决步骤
1. 预处理时间列
首先把Date & Time列转换为pandas datetime格式,同时提取仅日期部分作为新的分组字段:
import pandas as pd # 假设你的DataFrame变量名为df df['Date & Time'] = pd.to_datetime(df['Date & Time']) df['date_only'] = df['Date & Time'].dt.date
2. 按指定维度分组
直接以CELL ID、Party、date_only三个维度作为分组键,即可得到层级化的分组结果,你可以根据需要选择聚合方式,以下是两种常用场景的示例:
- 场景1:统计每个分组下的记录条数
grouped_count = df.groupby(['CELL ID', 'Party', 'date_only']).size()
输出的结果自带CELL ID→Party→日期的三层MultiIndex层级结构,打印时会自动按层级缩进展示,符合要求的展示逻辑。
- 场景2:保留每个分组下的所有原始行记录
grouped_raw = df.groupby(['CELL ID', 'Party', 'date_only']).apply(lambda x: x.to_dict('records'))
3. 示例输出效果
以给出的测试数据为例,统计记录数的输出结果如下:
CELL ID Party date_only 10631 3009787 2021-10-01 2 50987 2275172 2021-10-02 2 dtype: int64
如果需要更直观的树状层级打印,可以额外加一段遍历代码:
for (cell_id, party, date), group_data in grouped_count.items(): print(f"CELL ID: {cell_id}") print(f" └── Party: {party}") print(f" └── Date: {date}, 记录数: {group_data}")
运行后输出效果:
CELL ID: 10631 └── Party: 3009787 └── Date: 2021-10-01, 记录数: 2 CELL ID: 50987 └── Party: 2275172 └── Date: 2021-10-02, 记录数: 2
内容的提问来源于stack exchange,提问作者Zulqarnain Sabir
相关产品推荐
相关产品推荐

