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

Python中CSV多列分组及时间-距离绘图方案咨询

嘿,这两个问题我之前处理类似行驶数据时都碰到过,给你详细说下实现方法和思路:

1. 合并列并绘制时间-距离图

首先假设你的CSV是宽表格式(即同一个ID对应多组Time和Distance列,比如Time_1/Distance_1、Time_2/Distance_2...),我们可以用pandas把这些分散的列合并成单列,再绘图:

步骤代码:

首先导入需要的库:

import pandas as pd
import matplotlib.pyplot as plt

读取CSV并筛选目标ID的数据:

# 替换成你的文件名
df = pd.read_csv('your_data.csv')
# 替换成你要分析的目标ID
target_id = 1001
# 筛选出该ID的所有行(如果每个ID只有一行,filtered_df就是单行数据)
filtered_df = df[df['ID'] == target_id].reset_index(drop=True)

提取所有Time和Distance列,转成长表合并:

# 自动识别所有Time和Distance列
time_cols = [col for col in filtered_df.columns if 'Time' in col]
distance_cols = [col for col in filtered_df.columns if 'Distance' in col]

# 将多列Time合并为单列
time_series = filtered_df[time_cols].melt(var_name='Time_Col', value_name='Time')['Time'].dropna()
# 将多列Distance合并为单列
distance_series = filtered_df[distance_cols].melt(var_name='Dist_Col', value_name='Distance')['Distance'].dropna()

# 合并成最终的DataFrame(确保Time和Distance一一对应)
combined_df = pd.DataFrame({'Time': time_series, 'Distance': distance_series})

绘制时间-距离图:

plt.figure(figsize=(10, 6))
plt.plot(combined_df['Time'], combined_df['Distance'], marker='o', color='#1f77b4', linewidth=2)
plt.xlabel('Time Interval')
plt.ylabel('Traveled Distance')
plt.title(f'Time vs Distance for ID {target_id}')
plt.grid(alpha=0.3)
plt.show()

2. 无需合并列直接绘图的方法

当然有!如果你的Time和Distance列是一一对应的(比如Time_1对应Distance_1),可以直接遍历每一组列绘图,完全不需要合并:

实现代码:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('your_data.csv')
target_id = 1001
filtered_df = df[df['ID'] == target_id].reset_index(drop=True)

time_cols = [col for col in filtered_df.columns if 'Time' in col]
distance_cols = [col for col in filtered_df.columns if 'Distance' in col]

plt.figure(figsize=(10, 6))
# 遍历每一组Time-Distance列绘图
for t_col, d_col in zip(time_cols, distance_cols):
    # 取出非空数据
    times = filtered_df[t_col].dropna()
    distances = filtered_df[d_col].dropna()
    plt.plot(times, distances, marker='.', label=f'{t_col} → {d_col}')

plt.xlabel('Time Interval')
plt.ylabel('Traveled Distance')
plt.title(f'Time vs Distance for ID {target_id} (No Column Merging)')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

额外建议:

如果你的CSV其实是长表格式(即每行是一个ID的单条Time-Distance记录),那根本不需要合并列,直接筛选ID后绘图就行:

filtered_df = df[df['ID'] == target_id]
filtered_df.plot(x='Time', y='Distance', marker='o', figsize=(10,6), title=f'Time vs Distance for ID {target_id}')
plt.show()

这种情况下pandas的内置plot方法会直接处理,非常方便。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:59:27