簡體   English   中英

Python:如何在一組行中查找一個元素小於1而另一個元素大於1?

[英]Python : How to find in set of rows, one element is less than 1 and other is greater than 1?

我撓頭想辦法如何做這樣的事情。

我有一個看起來像這樣的數據框...

                A           B           C           D           E
1/2/2012 9:18   0.997558702 1.001294498 1.004264524 1.002337408 1.003628447
1/2/2012 9:19   1.004805553 1.001939237 1.002523232 1.001323543 1.003615329
1/2/2012 9:20   1.001151359 1.001290323 0.997728668 0.999937057 1
1/2/2012 9:21   1.001680821 1.003221649 1.001661232 1.000220313 1.003746398
1/2/2012 9:22   0.998454473 0.998715478 0.998095823 0.996286973 0.996985357
1/2/2012 9:23   0.996461899 0.99903537  1.00055388  0.999778915 0.997408207
1/2/2012 9:24   1.002174781 0.999034438 1.000492065 1.001232033 0.997978923
1/2/2012 9:25   0.999379982 1.00064433  0.998708963 1.000063103 0.999855345

我想找出行 設置其中一個元素> 1而另一個元素<1或反向的元素 <1或> 1的順序無關緊要。 盡管重要的是,比較必須在同一列中進行,並且要連續進行。 我想按列為數據幀計算所有此類事件

所以輸出類似

      A B C D E 
index 4 2 5 4 1

我試圖在循環中思考並繼續添加,但是以某種方式認為應該有更好的方法從數據幀中進行選擇。

回答了這個問題,但正如John所建議的,包括偽代碼和列名。 對於每行,如果row <1和row.shift(1)> 1或row> 1和row.shift(1)<1

我試圖檢查的是是否可以避免兩種方式都進行檢查,因為從本質上講,它在列中以兩種方式都可以找到+ ve -ve組合。

PS >>我正在檢查此數據集的均值回歸趨勢。

在嘗試任何巧妙的方法之前,我發現拼寫出簡​​單的版本會有所幫助。 僅使用布爾比較, shift和我們可以對布爾列求和以得到int(True) == 1的事實,因為int(True) == 1 ,我們可以這樣做:

>>> (((df < 1) & (df.shift() > 1)) | ((df > 1) & (df.shift() < 1))).sum()
0    4
1    2
2    5
3    4
4    1
dtype: int64

與布爾框架看起來像

>>> (df < 1) & (df.shift() > 1)
                   0      1      2      3      4

1/2/2012 9:18  False  False  False  False  False
1/2/2012 9:19  False  False  False  False  False
1/2/2012 9:20  False  False   True   True  False
1/2/2012 9:21  False  False  False  False  False
1/2/2012 9:22   True   True   True   True   True
1/2/2012 9:23  False  False  False  False  False
1/2/2012 9:24  False  False  False  False  False
1/2/2012 9:25   True  False   True  False  False

而且我認為相對容易閱讀。


一個有點過時的版本-雖然,老實說,可能對自己來說太過光滑了-可能像

>>> s = np.sign(df - 1)
>>> (s == -s.shift()).sum()
0    4
1    2
2    5
3    4
4    1
dtype: int64

但是很難看到它能達到預期的效果。 (我寫了它,但我只有大約85%的自信。)

暫無
暫無

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

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