与下一行、按ID分组、条件〉0的时间差需要在Pandas中计算
输入
ID timestamp Condition
aa 2023-1-5 06:33:27 23.33
aa 2023-1-5 06:33:33 13.26
aa 2023-1-5 06:33:39 5.71
aa 2023-1-5 06:33:45 0.00
aa 2023-1-5 06:33:51 0.00
aa 2023-1-5 06:33:57 0.00
aa 2023-1-5 06:46:15 0.00
aa 2023-1-5 06:46:21 0.00
aa 2023-1-5 06:46:27 2.18
aa 2023-1-5 06:46:33 0.00
aa 2023-1-5 06:46:39 4.10
aa 2023-1-5 06:46:45 21.73
aa 2023-1-5 06:46:51 33.79
输出:
时间戳_下一个|下一个时间差(秒)|
2023年1月5日6时33分33秒|六个|
2023年1月5日6时33分39秒|六个|
2023年1月5日6时46分27秒|七六八|
| |
| |
| |
||
||
2023年1月5日6时46分39秒|十二|
||
2023年1月5日6时46分45秒|六个|
2023年1月5日6时46分51秒|六个|
2023年1月5日6时46分57秒|六个|
样本代码
df2=df_input[(df_input['Condition']>0)]
df2['timestamp']= pd.to_datetime(df2['timestamp'])
df2['timestamp_next']=df2.groupby("id")["timestamp"].shift(-1)
df2['time_diff_next']=(df2['timestamp_next']-df2['timestamp'])/timedelta(seconds=1)
df_input=df_input.merge(df2[['id','timestamp','timestamp_next','time_diff_next']],how='left',on=['id','timestamp'])
我需要在不创建新 Dataframe df2的情况下实现此代码,如以上代码所示
2条答案
按热度按时间dldeef671#
如果您必须计算每组的
diff
或shift
,则需要使用groupby
以避免副作用。对于non-null Condition,在已筛选的DataFrame上使用groupby.diff
似乎比较合适。下面是在原始DataFrame中工作的一个建议:
避免
groupby
的另一种方法可能是pivot
和merge
,但我预计性能会相当差:输出:
diff(-1)
并对输出求反:*输出:
xfyts7mz2#
您可以用途: