慕碼人2483693
2022-06-07 19:07:47
我希望通過另一個(gè)系列索引一個(gè)系列會產(chǎn)生一個(gè)新系列,其索引與索引系列相同。然而,它是被索引的索引和索引系列的組合。跑步A = pandas.Series(range(3), index=list("ABC"))B = pandas.Series(list("AABBCC"), index=list("XYZWVU"))print(A[B])產(chǎn)量A 0A 0B 1B 1C 2C 2dtype: int64所以這里的索引形狀為 ,B.index但值為A.index。相反,我原本期望 for 的索引A[B]與 相同B.index,就好像組成兩個(gè)映射一樣。為什么不是這樣?當(dāng)前設(shè)置是否有用(在我看來這沒用)?有沒有“正確”的方法來獲得我正在尋找的東西?這個(gè)問題使某些操作變得棘手。例如,B[A[B] == 2]直觀地說是如何選擇 B 的條目,其值在 A 中查找時(shí)為 2。(如果 B 是一個(gè) DataFrame 在一列中有一些對象 ID,并且我們想根據(jù)值選擇 B 的行,這很有用該對象存儲在輔助表中。)但是,這會產(chǎn)生ValueError: cannot reindex from a duplicate axis異常。如果您刪除索引,這將起作用:B[(A[B] == 2).values]是使用.values正確的方法來做到這一點(diǎn)還是有更好的方法?
1 回答

慕尼黑5688855
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
在我看來,索引就是選擇相應(yīng)的索引。所以真的A[B]應(yīng)該index還在A.index。
相反,如果您想映射值,則使用map. 它似乎也更快:
%timeit -n 1000 B.map(A)
# 196 μs ± 6.92 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit -n 1000 A[B]
# 384 μs ± 5.54 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
和:
%timeit -n 1000 B[B.map(A).eq(2)]
# 624 μs ± 38.3 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit -n 1000 B[A[B].eq(2).values]
#779 μs ± 7.51 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
添加回答
舉報(bào)
0/150
提交
取消