通过列名获取多个Pandas列的索引
我想获取一些 pandas 数据框中列的数字索引。
如果只有一列,那就很简单:
nonzero(df.columns.values == 'conditionA')
但是如果有多列呢?我有一个可以用的方法,但写起来很啰嗦,看起来也不太好:
df = pd.DataFrame(columns=['conditionF', 'conditionB', 'conditionA', 'conditionD', 'conditionC'])
cols_to_find = ['conditionA', 'conditionB', 'conditionC']
[i for i in range(len(df.columns.values)) if df.columns.tolist()[i] in cols_to_find ]
有没有更好的方法呢?
2 个回答
-1
在编程中,有时候我们会遇到一些问题,可能会让我们感到困惑。比如,有人可能会问,为什么代码在某些情况下会出错,而在其他情况下却能正常运行。这种情况通常和代码的逻辑、数据的输入以及程序的运行环境有关。
当我们写代码的时候,实际上是在给计算机下达指令。计算机会按照我们写的步骤来执行任务。如果我们给出的指令有误,或者输入的数据不符合预期,计算机就会出现错误。
另外,程序的运行环境也很重要。不同的环境可能会影响代码的执行,比如操作系统的不同、软件版本的差异等,这些都可能导致代码的表现不一样。
所以,理解代码的逻辑、仔细检查输入的数据,以及注意运行环境的变化,都是解决问题的关键。
df=pd.DataFrame(columns=['conditionF', 'conditionB', 'conditionA', 'conditionD', 'conditionC'])
def search():
search=['conditionA', 'conditionB', 'conditionC']
c=len(search)
for i in df.columns.values:
print(i)
if i in search:
c-=1
return c==0
search()
13
这个方法有效,而且保持了顺序:
[df.columns.get_loc(col) for col in cols_to_find]
[2, 1, 4]
列表推导式是个好帮手。
(注意:这个解决方案下面有个评论,评论者搞混了,认为在pandas中,行索引可以重复,但列名通常是唯一的。)