猿问

Pandas 计算满足条件时列之间的时间差

我有一个 Pandas df,它有 2 列Day (Date in datetime format) 和Number of Troubleshootings。


我想创建两个新列,第一个是上一个故障事件的天数(我已经完成了),第二个是下一个故障事件的天数(我很难做到)。


Day            Number of breakdowns    Days from Previous Breakdown Event

2017-01-09                   0.0                                   0                                             

2017-01-12                   0.0                                   0

2017-01-13                   0.0                                   0

2017-01-14                   0.0                                   0

2017-01-16                   1.0                                   0

2017-01-17                   0.0                                   1

2017-01-18                   0.0                                   2

2017-01-19                   1.0                                   0

2017-01-20                   0.0                                   1

2017-01-21                   0.0                                   2

2017-01-23                   1.0                                   0

上次故障事件的天数计算自故障发生以来经过的天数。


代码:


s = df.groupby(df['Number of breakdowns'].ne(0).cumsum())['Day'].transform('first')

df['Days from Previous Breakdown Event'] = (df['Day'] - s).dt.days

zeros_index = df['Number of breakdowns'].ne(0).idxmax()

df.loc[:zeros_index,'Days from Previous Breakdown Event'] = 0



蛊毒传说
浏览 195回答 1
1回答

慕少森

iloc[::-1]用transform和交换顺序last,然后也交换s - df['Day']:s = df.groupby(df['Number of breakdowns'].iloc[::-1].ne(0).cumsum())['Day'].transform('last')df['Days from Next Breakdown Event'] = (s - df['Day']).dt.daysprint (df)          Day  Number of breakdowns  Days from Previous Breakdown Event  \0  2017-01-09                   0.0                                   0   1  2017-01-12                   0.0                                   0   2  2017-01-13                   0.0                                   0   3  2017-01-14                   0.0                                   0   4  2017-01-16                   1.0                                   0   5  2017-01-17                   0.0                                   1   6  2017-01-18                   0.0                                   2   7  2017-01-19                   1.0                                   0   8  2017-01-20                   0.0                                   1   9  2017-01-21                   0.0                                   2   10 2017-01-23                   1.0                                   0       Days from Next Breakdown Event  0                                7  1                                4  2                                3  3                                2  4                                0  5                                2  6                                1  7                                0  8                                3  9                                2  10                               0  详情:print (s)0    2017-01-161    2017-01-162    2017-01-163    2017-01-164    2017-01-165    2017-01-196    2017-01-197    2017-01-198    2017-01-239    2017-01-2310   2017-01-23Name: Day, dtype: datetime64[ns]
随时随地看视频慕课网APP

相关分类

Python
我要回答