來自以下多索引資料框:
a b c
0 0 0 42 65
1 6 0 340
2 5 71 800
3 2 51 409
4 0 23 279
5 8 38 549
1 0 1 23 252
1 9 13 977
2 1 19 943
2 0 2 23 295
1 3 39 458
2 1 62 308
3 0 95 954
4 9 78 535
3 0 4 67 849
1 3 46 761
2 7 49 485
3 0 44 638
如何從與 Numpy 陣列中的數字匹配的資料框中提取行?例如,如果我的陣列是:
a = np.array([2, 2, 4, 3])
結果應該是一個資料框,如:
a b c
0 5 71 800
1 1 19 943
2 9 78 535
3 0 44 638
我嘗試了以下方法:
i,j = df.index.levels
ix = a
df1 = pd.DataFrame(df.to_numpy()[ix])
但這給了我錯誤的結果。我目前得到的資料框是:
a b c
0 5 71 800
1 5 71 800
2 0 23 279
3 2 51 409
它實際上是從 df1 而不是 df 讀取索引。
uj5u.com熱心網友回復:
如果您想為每個級別使用一個數字,您可以使用直接切片:
a = np.array([2, 2, 4, 3])
b = df.index.get_level_values(0).unique().to_numpy() # to_numpy() is optional
# b = array([0, 1, 2, 3])
df.loc[zip(b,a)]
輸出:
a b c
0 2 5 71 800
1 2 1 19 943
2 4 9 78 535
3 3 0 44 638
如果要處理可能不正確的資料,請使用reindex:
a = np.array([2, 5, 0, 2])
# b = df.index.get_level_values(0).unique()
df.reindex(zip(b,a))
輸出:
a b c
0 2 5.0 71.0 800.0
1 5 NaN NaN NaN
2 0 2.0 23.0 295.0
3 2 7.0 49.0 485.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/497801.html
