如何按日期计算Pandas DataFrame并基于DEVICE_SN生成指定日期列
按日期处理Pandas DataFrame的解决方案
需求说明
根据DEVICE_SN匹配关联,提取df2['Date']中每个设备对应的首个日期生成新列Output,同时按日期维度简化DataFrame。
实现步骤与代码
1. 提取每个设备的首个日期
先对df2按DEVICE_SN分组,提取每组的首个日期:
import pandas as pd # 先确保日期列是datetime类型(如果原数据是字符串格式) df2['Date'] = pd.to_datetime(df2['Date']) # 生成设备-首个日期的映射表 device_first_date = df2.groupby('DEVICE_SN')['Date'].first().reset_index() device_first_date.rename(columns={'Date': 'Output'}, inplace=True)
2. 匹配生成目标列(类似VLOOKUP)
将映射表合并到目标DataFrame(假设为df1),完成匹配:
# 左连接保留原DataFrame所有数据,如需仅保留匹配项用how='inner' result_df = df1.merge(device_first_date, on='DEVICE_SN', how='left')
3. 按日期简化DataFrame
根据需求选择简化方式:
- 按
Output和DEVICE_SN去重,保留唯一组合:
simplified_df = result_df.drop_duplicates(subset=['Output', 'DEVICE_SN'])
- 按日期分组聚合,统计维度信息(比如每日设备数量):
aggregated_df = result_df.groupby('Output')['DEVICE_SN'].nunique().reset_index(name='Device_Count')
注意事项
- 如果
df2中同一设备有多条日期记录,groupby().first()会取数据中出现的首个日期;若需取最早日期,确保Date列已转为datetime类型即可 - 合并时根据业务需求选择连接方式,
how='left'可避免丢失原DataFrame中未匹配到的设备数据
内容的提问来源于stack exchange,提问作者Lucas Tornike
相关产品推荐
相关产品推荐

