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