tjdnbj 2024-03-13 11:27 采纳率: 41.2%
浏览 8

出租车载客点提取询问

以下是我的代码,但运行后上车点和下车点各只剩80多个,原始出租车轨迹数据有10千万+条,请问代码是哪里有问题吗?

data['空重_1']=data['空重'].shift(1)
data['change']=data['空重']-data['空重_1']
data=data.drop(['空重_1'],axis=1) #axis=0 为删掉某行; axis=1位删掉某列
data=data.loc[(data['change']==1) |(data['change']==-1)]

# 初始化上车点和下车点的列表  
pickups = []  
dropoffs = []  

# 遍历数据,根据差值判断上车点和下车点  
for index, row in data.iterrows():  
     
        # 只在index不是最后一行和第一行时才进行处理  
    if index < len(data) - 1 and index > 0 :  
      
      
    # 判断差值  
        if row['change'] == 1 :  
        # 乘客上车过程,选取上一行的数据(车载状态为0)作为上车点  
        # 同时保留相关列的信息  
            pickups.append({  
                '车牌号': data.iloc[index - 1]['车牌号'],  
                '时间': data.iloc[index - 1]['时间'],  
                '空重': 0,  # 上车点车载状态为0  
                'lon': data.iloc[index - 1]['lon'],  
                'lat': data.iloc[index - 1]['lat'],  
                'geometry': data.iloc[index - 1]['geometry'] if 'geometry' in df.columns else None,  
                '事件类型': '上车点'  
            })  
        elif row['change'] == -1:  
        # 乘客下车过程,选取当前行的数据(车载状态为1)作为下车点  
        # 同时保留相关列的信息  
            dropoffs.append({ 
                '车牌号': row['车牌号'],  
                '时间': row['时间'],  
                '空重': 1,  # 上车点车载状态为1
                'lon': row['lon'],  
                'lat': row['lat'],  
                'geometry': row['geometry'] if 'geometry' in df.columns else None,  
                '事件类型': '下车点'  
            })  
        # 将上车点和下车点的列表转换为DataFrame  
pickup_df = pd.DataFrame(pickups)  
dropoff_df = pd.DataFrame(dropoffs)  
# 将结果保存到新的CSV文件中  
pickup_df.to_csv('C:/Users/zyx20/Desktop/毕设/出租2019/taxi_pickups.csv', index=False)  
dropoff_df.to_csv('C:/Users/zyx20/Desktop/毕设/出租2019/taxi_dropoffs.csv', index=False)

  • 写回答

5条回答 默认 最新

  • 关注

    tjdnbj 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    根据您提供的代码和问题描述,可以分析出以下可能的问题和解决方案:

    问题1:出租车载客点只剩80多个,而原始出租车轨迹数据有10千万+条。 解决方案:

    • 可能是数据筛选条件不准确,导致未能正确提取出乘客上车和下车的点。 可以检查列'time'和'空重'的取值范围是否正确,并确保数据整体按时间排序。
    • 另外,建议使用更高效的遍历方式,例如使用dataframe的apply函数或者使用numpy向量化处理。

    问题2:代码中对两个数据框进行了重复赋值,结果导致只有最后一部分的上车点和下车点被保留。 解决方案:

    • 在遍历数据过程中,每次上车点和下车点的信息都会被赋值给pickup_df和dropoff_df,但是只有最后一次赋值会被保留,导致只有最后一部分的上车点和下车点被保存到结果文件中。 可以将pickup_df和dropoff_df的初始化移到遍历数据的外部,然后将每次生成的字典追加到对应的数据框中。

    修改后的代码如下所示:

    import pandas as pd
    
    data['空重_1'] = data['空重'].shift(1)
    data['change'] = data['空重'] - data['空重_1']
    data = data.drop(['空重_1'], axis=1)
    data = data.loc[(data['change'] == 1) | (data['change'] == -1)]
    
    # 初始化上车点和下车点的列表
    pickups = []
    dropoffs = []
    
    # 遍历数据,根据差值判断上车点和下车点
    for index, row in data.iterrows():
    
        # 只在index不是最后一行和第一行时才进行处理
        if index < len(data) - 1 and index > 0:
    
            # 判断差值
            if row['change'] == 1:
                # 乘客上车过程,选取上一行的数据(车载状态为0)作为上车点
                # 同时保留相关列的信息
                pickups.append({
                    '车牌号': data.iloc[index - 1]['车牌号'],
                    '时间': data.iloc[index - 1]['时间'],
                    '空重': 0,  # 上车点车载状态为0
                    'lon': data.iloc[index - 1]['lon'],
                    'lat': data.iloc[index - 1]['lat'],
                    'geometry': data.iloc[index - 1]['geometry'] if 'geometry' in data.columns else None,
                    '事件类型': '上车点'
                })
            elif row['change'] == -1:
                # 乘客下车过程,选取当前行的数据(车载状态为1)作为下车点
                # 同时保留相关列的信息
                dropoffs.append({
                    '车牌号': row['车牌号'],
                    '时间': row['时间'],
                    '空重': 1,  # 上车点车载状态为1
                    'lon': row['lon'],
                    'lat': row['lat'],
                    'geometry': row['geometry'] if 'geometry' in data.columns else None,
                    '事件类型': '下车点'
                })
    
    # 将上车点和下车点的列表转换为DataFrame
    pickup_df = pd.DataFrame(pickups)
    dropoff_df = pd.DataFrame(dropoffs)
    
    # 将结果保存到新的CSV文件中
    pickup_df.to_csv('C:/Users/zyx20/Desktop/毕设/出租2019/taxi_pickups.csv', index=False)
    dropoff_df.to_csv('C:/Users/zyx20/Desktop/毕设/出租2019/taxi_dropoffs.csv', index=False)
    

    请在运行修改后的代码后再次检查提取出的上车点和下车点是否满足预期。如果仍有问题,请提供更多关于数据和处理逻辑的细节说明,以便更好地帮助您解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月13日

悬赏问题

  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果
  • ¥15 二维装箱算法、矩形排列算法(相关搜索:二维装箱)
  • ¥20 nrf2401上电之后执行特定任务概率性一直处于最大重发状态
  • ¥15 二分图中俩集合中节点数与连边概率的关系
  • ¥20 wordpress如何限制ip访问频率
  • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据
  • ¥15 请求解答odoo17外发加工某工序的实操方法
  • ¥20 IDEA ssm项目 跳转页面报错500
  • ¥20 系统直接进入应急模式了,请教一下,人要裂开了