通过列名获取多个Pandas列的索引

8 投票
2 回答
6952 浏览
提问于 2025-04-18 01:51

我想获取一些 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中,行索引可以重复,但列名通常是唯一的。)

撰写回答