我有一个索引矩阵,我想得到相同的矩阵,其中填充了与pandas dataframe预定义列相对应的值,该列对应于给定位置上的索引。
例如,索引矩阵
[[0 1 2]
[1 0 2]
[2 1 3]
[3 4 2]]
pd.DataFrame [ “ID”]:
100
200
300
400
500
600
700
800
900
预期结果:
[[100 200 300]
[200 100 300]
[300 100 400]
[400 500 300]]
显示
t_ind = [ td[(td.index.isin(ind[:,0]))]["id"].values,
td[(td.index.isin(ind[:,1]))]["id"].values,
td[(td.index.isin(ind[:,2]))]["id"].values ]
打破结构并仅返回唯一值,而预期完整列表
知道如何正确转换?
注意:数据集很大,逐个元素是不可接受的,转换应该在一次操作中完成
答案 0 :(得分:0)
i_s
是列表清单。如果它是一个numpy数组,这同样有效。
i_s = [[0, 1, 2],
[1, 0, 2],
[2, 1, 3],
[3, 4, 2]]
s = pd.DataFrame([100, 200, 300, 400, 500, 600, 700, 800, 900])
s
不一定是DataFrame
。我这样做是为了与OP的问题保持一致。
pd.DataFrame([[s.iloc[i, 0] for i in i_s[j]] for j in range(len(i_s))])
0 1 2
0 100 200 300
1 200 100 300
2 300 200 400
3 400 500 300
答案 1 :(得分:0)
如果您将索引数组设为ndarray
,则可以使用它来索引另一个ndarray
,我们可以使用.values
从您的系列中获取:{/ p>
>>> ix
array([[0, 1, 2],
[1, 0, 2],
[2, 1, 3],
[3, 4, 2]])
>>> df["id"].values[ix]
array([[100, 200, 300],
[200, 100, 300],
[300, 200, 400],
[400, 500, 300]], dtype=int64)
或者,如果您的ix
是一个框架,则可以致电replace
:
>>> pd.DataFrame(ix).replace(df["id"])
0 1 2
0 100 200 300
1 200 100 300
2 300 200 400
3 400 500 300
我怀疑纯粹的numpy方法会快得多,但这很容易衡量。