pandas DataFrame中按首尾行条件筛选目标列的实现
问题根因
你现有代码无法运行的核心原因有两个:
- 动态列名访问语法错误:
df0.column是固定访问DataFrame下名为"column"的内置属性,不会读取循环中存储列名的变量column的实际值,运行时会直接抛出AttributeError。动态获取列值的正确语法是使用方括号索引:df0[column]。 - 行索引的写法存在适配风险:直接用
[0]/[-1]按标签取行的逻辑,在DataFrame索引不是默认0起始连续整数的场景下,会取到错误的行值,更稳妥的位置索引写法是使用iloc属性。
修正后可实现预期效果的代码
#Import pandas package import pandas as pd #Create Dataframe df0 = pd.DataFrame({'Temp01':[10,20,30,40,15],'Temp02':[50,60,70,70,45],'Temp03':[80,90,100,100,75]}) #empty list with column names test =[] for column in df0.columns: # 按位置取每列的最后一行、第一行值做比较 if df0[column].iloc[-1] > df0[column].iloc[0]: test.append(column) print(test)
代码运行后输出结果为 ['Temp01'],与你给出的预期完全一致。
性能更优的替代实现
如果不需要保留手动遍历列的逻辑,可以使用pandas原生的向量化运算实现相同效果,处理大体积DataFrame时效率远高于循环写法:
# 直接比较整个DataFrame的第一行、最后一行,筛选满足条件的列名 test = df0.columns[df0.iloc[-1] > df0.iloc[0]].tolist()
内容的提问来源于stack exchange,提问作者Rodrigo Ferraz
相关产品推荐
相关产品推荐

