如何在Python DataFrame中基于三列编写多条件数据查询函数
基于ID、框架类型和材质查询DataFrame的函数实现
核心实现代码(Pandas)
假设你的DataFrame列名为ID、Frame Type、Frame material,可以编写以下函数完成多条件精准查询:
import pandas as pd def query_frame_details(df, target_id, frame_type, frame_material): # 多条件逻辑与筛选,严格匹配列名和参数值 matched_rows = df[(df['ID'] == target_id) & (df['Frame Type'] == frame_type) & (df['Frame material'] == frame_material)] return matched_rows
调用示例
# 模拟测试用的DataFrame sample_df = pd.DataFrame({ 'ID': ['1c', '2a', '3b'], 'Frame Type': ['fixed', 'adjustable', 'fixed'], 'Frame material': ['aluminum', 'wood', 'wood'], 'Weight': ['1.2kg', '2.1kg', '1.8kg'] # 示例额外数据列 }) # 执行查询 result = query_frame_details(sample_df, target_id='1c', frame_type='fixed', frame_material='aluminum') # 处理查询结果 if not result.empty: # 获取唯一匹配的单行数据(确保条件组合唯一时使用) single_record = result.iloc[0] print(f"匹配记录详情: {single_record.to_dict()}") else: print("未找到符合条件的记录")
扩展优化方案
- 大小写不敏感查询:如果需要忽略参数与数据的大小写差异,可统一转换为小写处理:
def query_frame_details_case_insensitive(df, target_id, frame_type, frame_material): matched_rows = df[(df['ID'].str.lower() == target_id.lower()) & (df['Frame Type'].str.lower() == frame_type.lower()) & (df['Frame material'].str.lower() == frame_material.lower())] return matched_rows
- 直接返回单行字典:若确定三个条件组合唯一,可直接返回字典格式的单行数据,简化后续处理:
def get_single_frame_record(df, target_id, frame_type, frame_material): matched_rows = df[(df['ID'] == target_id) & (df['Frame Type'] == frame_type) & (df['Frame material'] == frame_material)] return matched_rows.to_dict('records')[0] if not matched_rows.empty else None
内容的提问来源于stack exchange,提问作者Arsalan
相关产品推荐
相关产品推荐

