簡體   English   中英

在數據框Python中選擇通用元素

[英]Selecting common elements in dataframes Python

我有3個DF,我想找到所有具有相同方向的單元(即,在DF上始終為正或始終為負):

test=pd.DataFrame([[0,1,0,3],
                   [-1,3,0,2],
                   [2,1.5,-3,1]],
                  columns=['a','b','c','d']
                   )
test2=pd.DataFrame([[1,1,0,2],
                   [1,-3,0,1],
                   [2,1.5,-2,1]],
                  columns=['a','b','c','d']
                   )
test3=pd.DataFrame([[1,2,0,2],
                   [1,-2,0,1],
                   [2,1.5,-2,1]],
                  columns=['a','b','c','d']
                   )

結果應為3個數據框,其中不一致的元素顯示NA。 例如,對於test1 ,它將是:

test=pd.DataFrame([[NA,1,NA,3],
                   [NA,NA,NA,2],
                   [2,1.5,-3,1]],
                  columns=['a','b','c','d']
                   )

注意,不考慮0(即導致NA)。 我可以逐個單元地執行此操作,但是我想知道是否可以一次在整個數據幀中執行此操作?

我試圖做((test>0)&(test1>0)&(test2>0)) ,但是可以,但是我不能將它與底片合並。

提前非常感謝

一種略有不同的方法-您可以將基礎數組堆疊在一起,使用np.sign ,然后求和並求和並np.sign添加的維,以生成df.where的掩碼。

In [58]: m, n = test.shape

In [59]: signs = np.sign(np.dstack((test, test2, test3)))

In [60]: mask = np.abs(np.sum(signs, -1)) == m

In [61]: test.where(mask)
Out[61]: 
     a    b    c  d
0  NaN  1.0  NaN  3
1  NaN  NaN  NaN  2
2  2.0  1.5 -3.0  1

您可以在相等性測試中使用np.sign和加法,然后where執行此操作:

 test.where(np.sign(test).add(np.sign(test2)).add(np.sign(test3)).abs() == 3)

輸出:

     a    b    c  d
0  NaN  1.0  NaN  3
1  NaN  NaN  NaN  2
2  2.0  1.5 -3.0  1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM