簡體   English   中英

DataFrame - 自上次正值和上次負值以來的時間

[英]DataFrame - time since last positive and last negative value

我有一個如下所示的輸入數據框:

df = pd.DataFrame.from_dict({"t": [1,2,3,4,5], 'val': [100, 5, -4, -9, 1], })

我需要計算以下兩列,一列是自上次正值以來的時間,一列是自上次負值以來的時間:

df['t_since_neg'] = [np.nan, np.nan, np.nan, 1, 1]
df['t_since_pos'] =  [np.nan, 1, 1,2,3]

t列代表時間。 我該怎么做呢? 我知道這與diff有關系,但我無法讓它完全正常工作。

更新(后續問題):如果我有一個額外的列'id',我將如何做到這一點,並且計算需要在每個組內單獨完成,即每個組彼此獨立?

解決方案

m = df.val > 0

df['t_since_neg'] = df['t'] - df['t'].where(~m).ffill().shift()
df['t_since_pos'] = df['t'] - df['t'].where( m).ffill().shift()

   t  val  t_since_neg  t_since_pos
0  1  100          NaN          NaN
1  2    5          NaN          1.0
2  3   -4          NaN          1.0
3  4   -9          1.0          2.0
4  5    1          1.0          3.0

解釋

要計算t_since_pos ,首先屏蔽 time 列中相應val為負的值,然后前向填充和移位以傳播與最后一個正值相對應的時間,最后從原始時間列中減去它。 可以使用相同的方法來計算t_since_neg

>>>  df['t'].where(m)
0    1.0
1    2.0
2    NaN
3    NaN
4    5.0
Name: t, dtype: float64

>>> .ffill().shift()
0    NaN
1    1.0
2    2.0
3    2.0
4    2.0
Name: t, dtype: float64

暫無
暫無

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

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