繁体   English   中英

将索引转换为相应的熊猫数据框值

[英]convert indices into corresponding pandas dataframe values

我有一个索引矩阵,我想用从对应于给定位置索引的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 ]

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

知道如何正确进行转换吗?

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

设定

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

如果将索引数组ndarray ,则可以使用它来索引另一个ndarray ,我们可以使用.values从Series获得.values

>>> 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

我怀疑纯粹的麻木方法会更快,但这很容易衡量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM