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

如何使用Pandas的df.at按条件选取DataFrame指定单元格的值?

如何从Pandas DataFrame中按条件选取特定单元格的值

兄弟,你的问题出在对df.at的用法理解上,咱们一步步来捋清楚怎么解决:

首先看你写的代码,df.at(df['Column A' == column_A_value]['Column B'])完全不符合df.at的调用规则——df.at需要行标签和列标签两个参数,是用方括号而非圆括号调用的(比如df.at[row_label, col_label]),你直接传了个Series进去肯定跑不通。那个临时方案的语法也有问题,根本没关联到目标DataFrame,自然拿不到正确的值。

下面给你几个靠谱的实现方式,完美适配你的循环场景:

方法1:用df.loc(最推荐,直观灵活)

df.loc是处理这类条件筛选+取值需求的标准工具,能直接按条件定位行,再指定要取的列:

# 筛选Column A等于指定值的行,取出Column B的所有匹配值(返回Series类型)
matching_values = df.loc[df['Column A'] == column_A_value, 'Column B']

# 如果确定只有一行匹配,要单个值的话,加.iloc[0]即可
single_value = df.loc[df['Column A'] == column_A_value, 'Column B'].iloc[0]

方法2:用df.at(需先获取行索引)

如果你坚持要用df.at,得先拿到符合条件的行的索引,再传入索引和列名:

# 获取匹配行的索引(假设只有一行匹配,取第一个索引)
row_idx = df[df['Column A'] == column_A_value].index[0]
# 用at精准定位单元格取值
single_value = df.at[row_idx, 'Column B']

适配你循环场景的完整代码

结合你要在循环里输出的需求,建议加个空值判断,避免没匹配到值时触发报错:

while condition:
    for val in some_column_A_values:
        # 先获取所有匹配的Column B值
        matches = df.loc[df['Column A'] == val, 'Column B']
        if not matches.empty:
            # 取第一个匹配值,若有多行匹配可循环处理所有值
            target_val = matches.iloc[0]
            print("{},{}".format('stuff', target_val), file=myfile)
        else:
            # 处理无匹配的情况,避免程序崩溃
            print("{},{}".format('stuff', '无匹配值'), file=myfile)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:51