![](/img/trans.png)
[英]Trying to iterate through rows of pandas dataframe and edit row if it satisfies a condition
[英]Pandas DataFrame, computing the Time Difference between one row and other row which satisfies a condition
加载测试数据帧:
df = pd.DataFrame({'year': [2019] * 5,
'month': [8] * 5,
'day': [16] * 5,
'hour': [12, 12, 12, 12, 13],
'minute': [1, 2, 3, 4, 5]})
df = pd.DataFrame(pd.to_datetime(df), columns=['Time_Stamp'])
df['Event_Master'] = [0, 0, 1, 0, 1]
加载的 DataFrame 看起来像:
Time_Stamp Event_Master
0 2019-08-16 12:01:00 0
1 2019-08-16 12:02:00 0
2 2019-08-16 12:03:00 1
3 2019-08-16 12:04:00 0
4 2019-08-16 13:05:00 1
为了解决这个问题,我首先添加一个名为“Next_Timestamp”的临时列,当给定事件为 1 时,它首先只获取时间戳。否则它是 pd.NaT。 然后我们可以使用 fillna 方法用每一行的下一个事件的时间回填 pd.NaT 值。 它现在包含每一行的下一个事件的时间。 最后,我们只是从“Next_Timestamp”列中减去“Time_Stamp”列。
df['Next_Timestamp'] = df[df.Event_Master == 1].Time_Stamp
df['Next_Timestamp'].fillna(method='backfill', inplace=True)
df['TimeDiff'] = df.Next_Timestamp - df.Time_Stamp
DataFrame 现在看起来像:
Time_Stamp Event_Master Next_Timestamp TimeDiff
0 2019-08-16 12:01:00 0 2019-08-16 12:03:00 00:02:00
1 2019-08-16 12:02:00 0 2019-08-16 12:03:00 00:01:00
2 2019-08-16 12:03:00 1 2019-08-16 12:03:00 00:00:00
3 2019-08-16 12:04:00 0 2019-08-16 13:05:00 01:01:00
4 2019-08-16 13:05:00 1 2019-08-16 13:05:00 00:00:00
最后,删除临时的“Next_Timestamp”列:
df.drop(['Next_Timestamp'], axis=1, inplace=True)
最终的 DataFrame 看起来像:
Time_Stamp Event_Master TimeDiff
0 2019-08-16 12:01:00 0 00:02:00
1 2019-08-16 12:02:00 0 00:01:00
2 2019-08-16 12:03:00 1 00:00:00
3 2019-08-16 12:04:00 0 01:01:00
4 2019-08-16 13:05:00 1 00:00:00
根据需要对其他列重复。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.