![](/img/trans.png)
[英]Pandas: Convert DataFrame Column Values Into New Dataframe Indices and Columns
[英]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.