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"]]
字符串预期产出:
[[1,5], [7,4], [3,0]]
型我知道这可以通过使用列表理解来实现,因为我有超过百万条记录,所以我正在寻找更有效的方法。
6kkfgxo01#
您忘记提供的列表解析:
In [27]: [row[1][col].to_list() for row, col in zip(df.iterrows(), cols)] Out[27]: [[1, 5], [7, 4], [3, 0]]
字符串
bsxbgnwa2#
我不认为你将能够做到这一点,而不迭代的cols变量。尝试这一点-
cols
[df.loc[i,j].tolist() for i,j in enumerate(cols)]
个字符
z18hc3ub3#
您可以将标签Map到索引,然后take_along_axis
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]])
3条答案
按热度按时间6kkfgxo01#
您忘记提供的列表解析:
字符串
bsxbgnwa2#
我不认为你将能够做到这一点,而不迭代的
cols
变量。尝试这一点-个字符
z18hc3ub3#
您可以将标签Map到索引,然后
take_along_axis
字符串