df = pd.DataFrame({"col_a": [1,2,3], "col_b": [5,4,0], "col_c": [9,7,6])
cols = [["col_a", "col_b"],["col_c", "col_b"],["col_a", "col_b"]]
#expected output:[[1,5],[7,4],[3,0]]
我知道这可以使用列表理解来实现,因为我有超过一百万条记录,因此正在寻找更有效的方法
答案 0 :(得分:1)
您忘记提供的列表推导式:
In [27]: [row[1][col].to_list() for row, col in zip(df.iterrows(), cols)]
Out[27]: [[1, 5], [7, 4], [3, 0]]
答案 1 :(得分:0)
如果不迭代 cols
变量,我认为您无法做到这一点。试试这个 -
[df.loc[i,j].tolist() for i,j in enumerate(cols)]
[[1, 5], [7, 4], [3, 0]]
答案 2 :(得分:0)
您可以将标签映射到索引,然后 take_along_axis
d = {c: i for i,c in enumerate(df.columns)}
idx = pd.DataFrame(cols).replace(d).to_numpy()
#array([[0, 1],
# [2, 1],
# [0, 1]])
np.take_along_axis(df.to_numpy(), idx, axis=1)
#array([[1, 5],
# [7, 4],
# [3, 0]])