Files
eu_active_script/hang/active_time_analysis.py

55 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pandas as pd
from datetime import datetime
import os
# 配置参数
CONFIG = {
'input_csv': r'C:\Users\Administrator\Desktop\European Local O&M\all-active-0522.csv.csv',
'output_dir': './output',
'required_columns': ['car_vins', 'active_status', 'MATERIAL', 'Area','active_date']
}
df=pd.read_csv(CONFIG['input_csv'])
df['active_date'] = pd.to_datetime(df['active_date'], errors='coerce')
active_df = df[df['active_status'] == 'active']
daily_count = active_df.groupby(active_df['active_date'].dt.date).size().reset_index(name='active_count')
print(daily_count)
daily_count['active_date'] = pd.to_datetime(daily_count['active_date'])
daily_count.set_index('active_date', inplace=True)
weekly_count = daily_count.resample('W-MON').sum().reset_index() # 每周从周一开始
weekly_count.columns = ['week_start', 'weekly_active_count']
weekly_count['week_number'] = pd.to_datetime(weekly_count['week_start']).dt.isocalendar().week
weekly_count['year'] = pd.to_datetime(weekly_count['week_start']).dt.isocalendar().year
# 转换为 datetime 类型
weekly_count['week_start'] = pd.to_datetime(weekly_count['week_start'])
# 提取年份后两位、月份
weekly_count['year'] = weekly_count['week_start'].dt.year % 100
weekly_count['month'] = weekly_count['week_start'].dt.month
# 分组内生成「每月第几周」编号(用 cumcount
weekly_count['week_in_month'] = weekly_count.groupby(['year', 'month']).cumcount() + 1
# 拼接成格式25-1-4
weekly_count['year_month_week'] = (
weekly_count['year'].astype(str) + '-' +
weekly_count['month'].astype(str) + '-' +
weekly_count['week_in_month'].astype(str)
)
print(weekly_count)
# 获取输出目录路径
output_dir = CONFIG['output_dir']
os.makedirs(output_dir, exist_ok=True) # 自动创建目录(如果不存在)
# 拼接 Excel 文件路径
output_path = os.path.join(output_dir, 'active_car_number.xlsx')
# 导出
with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
daily_count.reset_index().to_excel(writer, sheet_name='Daily', index=False)
weekly_count.to_excel(writer, sheet_name='Weekly', index=False)
print(f"已成功导出至:{output_path}")