将索引转换为相应的pandas数据帧值

时间:2016-05-18 18:34:52

标签: python pandas

我有一个索引矩阵,我想得到相同的矩阵,其中填充了与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 ]

打破结构并仅返回唯一值,而预期完整列表

知道如何正确转换?

注意:数据集很大,逐个元素是不可接受的,转换应该在一次操作中完成

2 个答案:

答案 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方法会快得多,但这很容易衡量。