You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas按mac_address分组获取date列首尾数据的实现方法问询

Pandas 分组取首尾行实现方案

前置条件:你已完成df按mac_address、date升序排序,代码如下:

df = df.sort_values(by=['mac_address', 'date'], ascending=(True, True)) 

完整实现代码

import pandas as pd

# 1. 生成分组辅助列
# 每个mac分组内的行序号(从0开始计数)
df['group_row_idx'] = df.groupby('mac_address').cumcount()
# 每个mac分组的总记录数
df['group_total_cnt'] = df.groupby('mac_address')['mac_address'].transform('count')
# 把date列转成datetime格式,方便后续提取时间
df['date'] = pd.to_datetime(df['date'])

# -------------------
# 第一类输出
# -------------------
# 筛选每个分组的首行、尾行,总记录数为1的分组只会保留1行
output1 = df[(df['group_row_idx'] == 0) | (df['group_row_idx'] == df['group_total_cnt'] - 1)]\
            .drop(columns=['group_row_idx', 'group_total_cnt'])\
            .reset_index(drop=True)

# -------------------
# 第二类输出
# -------------------
# 先筛选总记录数≥2的分组的首尾行
output2 = df[(df['group_total_cnt'] >= 2) & 
             ((df['group_row_idx'] == 0) | (df['group_row_idx'] == df['group_total_cnt'] - 1))].copy()
# 提取date列的时间部分
output2['date'] = output2['date'].dt.strftime('%H:%M:%S')
# 删除辅助列重置索引
output2 = output2.drop(columns=['group_row_idx', 'group_total_cnt'])\
            .reset_index(drop=True)

补充说明

  • 如果你需要保留原始date列的字符串格式,可以在处理output2前先把原始date备份到新列,再做时间提取。
  • 如果你的date列已经是datetime类型,可以跳过转换步骤直接使用。

内容的提问来源于stack exchange,提问作者Théré Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 09:36:01