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

如何用.loc或函数按列名字符串与列内值过滤Pandas DataFrame?

解决方案:可复用的DataFrame筛选方法

单个.loc直接实现

先构造示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Country/Region': ['France', 'France', 'United Kingdom', 'United Kingdom', 'France'],
    'Record ID': [118, 110, 146, 836, 944]
})

通过两步完成筛选:

  1. 定位列名包含指定字符串的目标列
  2. 用.loc筛选该列值符合要求的行,同时保留所有列
# 找到列名含'Country'的目标列
target_col = df.columns[df.columns.str.contains('Country')].item()
# 筛选行并输出结果
filtered_df = df.loc[df[target_col] == 'France', :]
print(filtered_df)

输出结果:

Country/Region  Record ID
0           France        118
1           France        110
4           France        944

封装为可复用函数(适配多组条件)

如果需要频繁使用这类筛选逻辑,或者要支持多组条件组合,直接封装成函数更高效:

基础版(单条件)

def filter_df_by_col_pattern(df, col_pattern, target_value):
    # 获取匹配列名模式的列
    matching_cols = df.columns[df.columns.str.contains(col_pattern)]
    if not matching_cols.empty:
        target_col = matching_cols.item()
        # 返回筛选后的DataFrame
        return df.loc[df[target_col] == target_value, :]
    # 无匹配列时返回空DataFrame
    return pd.DataFrame()

调用示例:

result = filter_df_by_col_pattern(df, 'Country', 'France')

进阶版(多条件组合)

如果需要同时满足多组「列名匹配+值匹配」的条件,可以扩展函数支持批量条件:

def filter_df_by_multi_conditions(df, conditions):
    # 初始化全True的布尔掩码
    mask = pd.Series([True]*len(df), index=df.index)
    for col_pattern, target_value in conditions:
        matching_cols = df.columns[df.columns.str.contains(col_pattern)]
        if matching_cols.empty:
            continue
        target_col = matching_cols.item()
        # 叠加条件(逻辑与)
        mask &= df[target_col] == target_value
    return df.loc[mask, :]

调用示例(比如同时筛选Country为France、Record ID包含11的行):

conditions = [('Country', 'France'), ('Record', '11')]
result = filter_df_by_multi_conditions(df, conditions)

关于lambda+filter的问题

filter函数更适合处理一维序列,而DataFrame的筛选依赖布尔索引,直接用.loc结合str.contains定位列、生成行筛选掩码是更贴合pandas的写法,没必要强行用lambda+filter。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:03:36