我有一個像這樣的 2 個級別的 pd.multi-index
var_0 var_1
instances timepoints
0 1 1 4
2 2 5
3 3 6
4 5 8
1 1 1 4
2 2 55
3 3 6
4 3 6
2 1 1 42
2 2 5
3 3 6
我要做的是將其轉換為具有形狀(n_instances、n_columns、n_timepoints)的 3 維 NumPy 陣列。
我曾嘗試使用實體的值進行重塑,但這對我來說在技術上有點進步,而且我很卡住。
Unique_Cases = df_train.index.levels[0]
print(Unique_Cases)
D = [df_train.loc[instances].values for instances in Unique_Cases]
print(np.array(D,dtype=object).shape)
uj5u.com熱心網友回復:
您的資料框的形狀與您想要的 numpy 陣列不同。所以我們先改造一下:
# unstack() swings `timepoints`` from vertical to horizontal.
# stack(level=0) swings the var_* columns from horizontal to vertical
tmp = df.unstack().stack(level=0)
# tmp:
timepoints 1 2 3 4
instances
0 var_0 1 2 3 5.0
var_1 4 5 6 8.0
1 var_0 1 2 3 3.0
var_1 4 55 6 6.0
2 var_0 1 2 3 NaN
var_1 42 5 6 NaN
現在您可以對資料框進行切片以獲得所需的陣列:
arr = np.array(
[tmp.xs(i).to_numpy() for i in df.index.unique("instances")]
)
# arr
array([[[ 1., 2., 3., 5.],
[ 4., 5., 6., 8.]],
[[ 1., 2., 3., 3.],
[ 4., 55., 6., 6.]],
[[ 1., 2., 3., nan],
[42., 5., 6., nan]]])
# arr.shape
(3, 2, 4)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516077.html
標籤:Python熊猫麻木的
上一篇:為什么np.sin(x)和np.cos(x)從0到2*pi的絕對值之和不一樣?
下一篇:遍歷Pandas資料框和字典項
