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

列车乘客到达时间分布应用于车次数据的实现方法咨询

实现方案

方法一:Python Pandas 处理

这是批量处理最灵活的方案,适合数据量较大的场景:

  • 数据预处理:把车次数据和占比数据读取为DataFrame,将发车时间转为datetime类型,发车前时长转为timedelta类型,占比去掉百分号后转成小数(比如0.1%转0.001)。
  • 交叉关联数据:通过添加辅助键实现两个数据集的全量匹配,让每条车次数据对应24条占比记录。
  • 计算核心字段:
    • 到达时间:用发车时间减去发车前时长得到对应区间的乘客到达时间
    • 区间乘客数:总乘客数乘以对应区间的占比,可根据需求取整
  • 输出结果:保留需要的字段(列车编号、到达时间、区间乘客数等),导出为CSV或Excel格式

示例代码:

import pandas as pd

# 加载车次数据(实际可从文件读取)
train_data = pd.DataFrame({
    '列车编号': ['11111', '11112'],
    '乘客数量': [750, 900],
    '发车时间': pd.to_datetime(['2018-01-01 07:00:00', '2018-01-01 08:00:00'])
})

# 加载占比数据(实际可从文件读取)
arrival_ratio = pd.DataFrame({
    '发车前时长': pd.to_timedelta(['02:00:00', '01:55:00', '01:50:00']),
    '到达占比': [0.001, 0.005, 0.011]  # 提前转换为小数
})

# 交叉连接两个数据集
cross_data = train_data.assign(key=1).merge(arrival_ratio.assign(key=1), on='key').drop('key', axis=1)

# 计算到达时间和区间乘客数
cross_data['到达时间'] = cross_data['发车时间'] - cross_data['发车前时长']
cross_data['区间乘客数'] = cross_data['乘客数量'] * cross_data['到达占比']
cross_data['区间乘客数'] = cross_data['区间乘客数'].round().astype(int)  # 取整

# 整理输出
result = cross_data[['列车编号', '到达时间', '区间乘客数']]
print(result)
# 导出到Excel
# result.to_excel('乘客到达记录.xlsx', index=False)

方法二:SQL 处理(以MySQL为例)

适合已有数据库存储数据的场景:

  • 创建数据表:分别存储车次数据(train_schedule)和占比数据(arrival_ratio),注意字段类型匹配(发车时间用DATETIME,发车前时长用TIME,占比用DECIMAL)。
  • 交叉关联查询:用CROSS JOIN实现两个表的全量匹配。
  • 计算字段:用DATE_SUB函数计算到达时间,用乘法+ROUND函数计算区间乘客数。

示例SQL:

-- 创建车次表
CREATE TABLE train_schedule (
    列车编号 VARCHAR(10),
    乘客数量 INT,
    发车时间 DATETIME
);
INSERT INTO train_schedule VALUES 
('11111', 750, '2018-01-01 07:00:00'),
('11112', 900, '2018-01-01 08:00:00');

-- 创建占比表
CREATE TABLE arrival_ratio (
    发车前时长 TIME,
    到达占比 DECIMAL(5,3)
);
INSERT INTO arrival_ratio VALUES 
('02:00:00', 0.001),
('01:55:00', 0.005),
('01:50:00', 0.011);

-- 生成结果查询
SELECT 
    ts.列车编号,
    DATE_SUB(ts.发车时间, INTERVAL ar.发车前时长 HOUR_SECOND) AS 到达时间,
    ROUND(ts.乘客数量 * ar.到达占比) AS 区间乘客数
FROM train_schedule ts
CROSS JOIN arrival_ratio ar
ORDER BY ts.列车编号, 到达时间 DESC;

方法三:Excel Power Query 处理

适合非技术人员快速操作:

  1. 将两份数据分别放到Excel的两个工作表(如“车次数据”“占比数据”)。
  2. 打开Power Query,分别导入两个工作表的数据。
  3. 预处理占比数据:移除“到达占比”列的百分号,转成小数;确保“发车前时长”为时间类型。
  4. 交叉合并数据:添加一个值为1的辅助列到两个数据集,通过辅助列做合并查询,实现全量匹配。
  5. 添加计算列:
    • 到达时间:= [发车时间] - [发车前时长]
    • 区间乘客数:= ROUND([乘客数量] * [到达占比], 0)
  6. 整理列,移除冗余字段后加载回Excel。

内容的提问来源于stack exchange,提问作者digidrago

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:01:35