我有以下陣列:
table = np.array([
[1.0, 1.0, 3.0, 5.0],
[1.0, 2.0, 5.0, 3.0],
...
[2.0, 5.0, 2.0, 1.0],
[8.0, 9.0, 7.0, 2.0]])
讓我們分別用 ['a', 'b', 'm', 'n'] 來命名不同的列。
“table”是我的參考表,我想在其中提取 'm' 和 'n' 給定的 'a' 和 'b' 包含在我們稱為 'my_list' 的串列中。在該串列中,我們允許重復對 (a, b)。
注意:這里的串列可以稱為陣列(不是python意義上的)
使用 for 回圈更容易做到這一點。但是,對于我的問題,我的串列 'my_list' 可以包含超過 100000 對 (a, b),因此使用 for 回圈執行它對我的作業來說并不是最佳選擇。如何在幾行(1 到 3 行)中使用 numpy 函式或 pandas 函式來完成?
我想要的一個例子:給出以下串列
my_list = np.array([
[1.0, 2.0],
[1.0, 2.0],
[8.0, 9.0]])
我想得到以下結果:
results = np.array([
[5.0, 3.0],
[5.0, 3.0],
[7.0, 2.0]])
先感謝您
編輯 1:與 for 回圈等效
這是 for 回圈的等價物(使用 for 回圈的最簡單方法,無需二分搜索):
result = []
for x in my_list:
for y in table:
if (x[0] == y[0]) and (x[1] == y[1]):
result.append([y[2], y[3]])
break
print(results)
uj5u.com熱心網友回復:
使用熊貓的一種可能方法是執行內部merge
pd.DataFrame(table).merge(pd.DataFrame(my_list))[[2, 3]].to_numpy()
array([[5., 3.],
[5., 3.],
[7., 2.]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338750.html
上一篇:在行上應用映射函式
