55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
|
|
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}")
|