如何使用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
相关产品推荐
相关产品推荐

