我有一個看起來像這樣的資料框:
df = pd.DataFrame(np.random.rand(10,3), columns = ['col1', 'col2', 'col3'])
| 第 1 列 | 列2 | 第 3 列 | |
|---|---|---|---|
| 0 | 0.692154 | 0.286560 | 0.515904 |
| 1 | 0.798917 | 0.777593 | 0.971300 |
我有另一個矩陣,它是一個布爾矩陣,看起來像這樣:
b_matrix = pd.DataFrame(np.array([[0,1,1],
[1,1,0],
[0,0,1],
[0,1,0]]),
columns = ['col1', 'col2', 'col3'],
index = ['input1', 'input2', 'input3', 'input4'])
| 第 1 列 | 列2 | 第 3 列 | |
|---|---|---|---|
| 輸入1 | 0 | 1 | 1 |
| 輸入2 | 1 | 1 | 0 |
| 輸入3 | 0 | 0 | 1 |
| 輸入4 | 0 | 1 | 0 |
所以這里的想法是我將提供一些輸入,這將被檢查b_matrix,然后我將只回傳給我df. 例如,如果輸入是input1那么輸出將是df[['col2', 'col3']]:
| 列2 | 第 3 列 | |
|---|---|---|
| 0 | 0.286560 | 0.515904 |
| 1 | 0.777593 | 0.971300 |
我可以想出一種方法來保持列名的靜態串列以進行每次檢查,但我想知道是否有更直接的方法?
uj5u.com熱心網友回復:
您可以使用input來獲取用戶輸入和df.loc:
In [1076]: inp = input('User input:')
User input:input1
In [1077]: df[b_matrix.columns[b_matrix.loc[inp].eq(1)]]
Out[1077]:
col2 col3
0 0.179902 0.832655
1 0.444187 0.487146
2 0.879333 0.756792
3 0.870601 0.661337
4 0.082169 0.008669
5 0.190734 0.975966
6 0.839718 0.290976
7 0.862724 0.426222
8 0.581909 0.333300
9 0.949953 0.539106
如果您選擇input2:
In [1080]: inp = input('User input:')
User input:input2
In [1081]: df[b_matrix.columns[b_matrix.loc[inp].eq(1)]]
Out[1081]:
col1 col2
0 0.072600 0.179902
1 0.126708 0.444187
2 0.646533 0.879333
3 0.673643 0.870601
4 0.313205 0.082169
5 0.951917 0.190734
6 0.076799 0.839718
7 0.294087 0.862724
8 0.240569 0.581909
9 0.851999 0.949953
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368004.html
上一篇:使用相同的列索引對指定陣列的列進行操作-陣列中的前一行
下一篇:查看索引是否包含在切片物件中
