使用map或apply使用列名列表获取列的多个索引

时间:2017-01-11 23:02:28

标签: python pandas

如果我的列名与某些数据相对应,请使用pandas:

import numpy as np
import pandas as pd
data = pd.DataFrame(np.zeros((5,4)), columns=['x1', 'a', 'c', 'b'])
colnames = ['a', 'b']

然后我可以得到这样的列位置:

[data.columns.get_loc(col) for col in colnames]

有没有办法使用例如map或apply函数来完成这项工作?

2 个答案:

答案 0 :(得分:1)

我不确定你为什么不想使用列表理解 - 我更喜欢它的可读性 - 但是它可以写​​成地图:

map(lambda col: data.columns.get_loc(col), colnames)

答案 1 :(得分:0)

这很好,但这是searchsorted的用途:

def get_all_locs(index, x):
    v = index.values
    a = v.argsort()
    i = a.argsort()
    return a[v[a].searchsorted(x)]

get_all_locs(data.columns, colnames)

array([1, 3])