Pandas:无需循环与判断,识别DataFrame中返程航班对应矩阵
识别返程航班乘客:无循环/条件语句实现方案
问题背景
需要从含voyage字段的DataFrame中筛选出乘坐返程航班的乘客,判断标准是行程矩阵为反转对称形式(即矩阵等于自身转置,如[[5,8],[8,5]]),且禁止使用显式for循环或if语句。
解决步骤
1. 批量转换行程矩阵为Numpy数组
先解决你提到的Numpy数组转换问题,假设你的DataFrame为df,voyage列存储列表形式的矩阵:
import numpy as np import pandas as pd # 将每个行程列表转为Numpy数组 df['voyage_array'] = df['voyage'].apply(np.array)
2. 向量化判断反转对称矩阵
利用Numpy的转置操作T和数组相等判断,生成布尔标记列:
# 判断矩阵是否等于自身转置,无显式循环/条件 df['is_return'] = df['voyage_array'].apply(lambda x: np.array_equal(x, x.T))
这里的lambda属于隐式向量化处理,未使用禁止的显式循环或条件语句。
3. 筛选返程乘客
直接通过布尔索引提取目标数据:
return_passengers = df[df['is_return']]
测试验证
用示例数据验证逻辑:
# 测试数据 sample_df = pd.DataFrame({ 'passenger_id': [101, 102, 103], 'voyage': [[[5,8],[8,5]], [[1,2],[3,8]], [[7,3],[3,7]]] }) # 执行上述步骤后,return_passengers会包含passenger_id 101和103的记录
额外处理:统一矩阵维度
如果voyage列存在非2x2的矩阵,可先过滤:
# 仅保留2x2规格的行程矩阵 df = df[df['voyage_array'].apply(lambda x: x.shape == (2,2))]
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

