[英]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.