【发布时间】:2021-05-05 16:03:00
【问题描述】:
我有一个如下的数据框:
A B datetime
10 NaN 12-03-2020 04:43:11
NaN 20 13-03-2020 04:43:11
NaN NaN 14-03-2020 04:43:11
NaN NaN 15-03-2020 04:43:11
NaN NaN 16-03-2020 04:43:11
NaN 50 17-03-2020 04:43:11
20 NaN 18-03-2020 04:43:11
NaN 30 19-03-2020 04:43:11
NaN NaN 20-03-2020 04:43:11
30 30 21-03-2020 04:43:11
40 NaN 22-03-2020 04:43:11
NaN 10 23-03-2020 04:43:11
这里的逻辑是如果 A 列是 notna() 并且 B 列的下一个最接近的非 NaN 值是 notna() 则返回 B 列的时间戳。
对于这个逻辑,我使用下面的代码:
df['cond1'] = df['A'].notna()
for t in range(1,5):
if df['cond1'] == True:
df['next_ts'] = np.where(df['B'].shift(-t).notna(),df['datetime'].shift(-t),np.datetime64('NaT'))
else:
None
对于上面的代码,我收到以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
所需的输出如下:
A B datetime next_ts
10 NaN 12-03-2020 04:43:11 NaN
NaN 20 13-03-2020 04:43:11 NaN
NaN NaN 14-03-2020 04:43:11 NaN
NaN NaN 15-03-2020 04:43:11 NaN
NaN NaN 16-03-2020 04:43:11 NaN
NaN 50 17-03-2020 04:43:11 NaN
20 NaN 18-03-2020 04:43:11 19-03-2020 04:43:11
NaN 30 19-03-2020 04:43:11 NaN
NaN NaN 20-03-2020 04:43:11 NaN
30 30 21-03-2020 04:43:11 22-03-2020 04:43:11
40 NaN 22-03-2020 04:43:11 23-03-2020 04:43:11
NaN 10 23-03-2020 04:43:11 NaN
Someone please help me in achieving my logic.
【问题讨论】:
-
是否可以添加预期输出?
-
@jezrael 是更新了所需的输出
标签: python pandas dataframe numpy nan