1
我一直在應用一些關於我的代碼庫的二進制布爾運算符,並遇到了一個令我感到驚訝的bug。我重建一個最小的工作示例演示以下行爲......對於持有不同索引的具有相同長度元素的pandas元素二元布爾操作數,規則是什麼?
import pandas
s = pandas.Series([True]*4)
d = pandas.DataFrame({ 'a':[True, False, True, False] , 'b':[True]*4 })
print(d)
a b
0 True True
1 False True
2 True True
3 False True
print(s[0:2])
0 True
1 True
dtype: bool
print(d.loc[ d['a'] , 'b' ])
0 True
2 True
dtype: bool
print(s[0:2] & d.loc[ d['a'] , 'b' ])
0 True
1 False
2 False
最後這句話的價值在其產生3元的驚喜抓住我完全。在這裏實現索引的影響我手動重置索引以產生我期望的結果。
s[0:2].reset_index(drop=True) & d.loc[ d['a'] , 'b' ].reset_index(drop=True)
0 True
1 True
不用說我需要重新審視的文件,並獲得抓地力,瞭解索引規則在這裏如何應用。任何人都可以一步一步解釋這個操作符如何處理混合索引?
=============================================
只是爲了增加對那些從類似[R背景的人相比,R的data.frame
相當於操作得到我期望的是什麼...
> a = c(TRUE,FALSE,TRUE,FALSE)
> b = c(TRUE,TRUE,TRUE,TRUE)
>
> d = data.frame(a, b)
> d
a b
1 TRUE TRUE
2 FALSE TRUE
3 TRUE TRUE
4 FALSE TRUE
> s = c(TRUE,TRUE,TRUE,TRUE)
> s
[1] TRUE TRUE TRUE TRUE
>
> d[ d$a , 'b']
[1] TRUE TRUE
>
> s[0:2]
[1] TRUE TRUE
> s[0:2] & d[ d$a , 'b']
[1] TRUE TRUE
哇,這個索引方案是來自R嚴格元素操作的全新遊戲。我會在我的問題中整合一些R例子來提供一些比較。感謝您的基本技巧。 – jxramos
您仍然可以使用底層numpy數組(在Series/DataFrame之一上調用'.values'屬性)進行元素操作。 – ayhan
哇,索引對齊是一個強大的功能...在這裏找到了一個很好的演示和解釋[我需要知道什麼關於熊貓索引? (第2部分)](https://www.youtube.com/watch?v=15q-is8P_H4)。如果我沒有弄錯,在R中沒有類似的東西,我認爲R的[回收規則](https://cran.r-project.org/doc/manuals/r-release/R-intro.html#The - 回收規則)會在示例中插入一個子集操作的應用,該操作應用於較大的集合,其中索引對齊首先發生,並且NaN在其他地方被填充。 – jxramos