减去x和先验元素的Lambda函数

2024-04-26 15:06:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含一些时间戳的数据帧,我需要为每个ID计算每个时间戳之间的差异。我的数据帧如下所示:

ID    Value   Date       Date_diff_cumsum   visVal  Weight   TempVal
 1    0.000 2017-02-13 20:54:00      0.0    0.000    75.0       NaN
 1   29.598 2017-02-13 21:02:00      8.0   29.598    75.0  4.933000
 1  273.000 2017-02-13 22:33:00      99.0  273.000   75.0  3.676768
 1  153.000 2017-02-13 23:24:00      150.0  153.000  75.0  1.360000
 1  136.902 2017-02-14 00:01:00      187.0  136.902  75.0  0.976128

现在,我需要计算Date\u diff\u cumsum作为每个时间戳之间的差,而不是第一个时间戳。我的代码如下:

df = df.sort_values(by=['Date'])
df['Date_diff_cumsum'] = df.groupby('ID').Date.diff().dt.seconds / 60.0
df['Date_diff_cumsum'] = df.groupby('ID').Date_diff_cumsum.cumsum().fillna(0)
df['Value'] = df['Value'].apply(lambda x: x*1000)
df['visVal'] = df.groupby('ID')['Value'].transform(lambda x:(x-x.iloc[0]*100))
df['Weight'] = df['ID'].map(dfWeight.set_index('ID')['Value']).fillna(0)
df['TempVal'] = (df['Value']/(df['Weight'] * df['Date_diff_cumsum'])*100).fillna(0)

如何修改lambda func来计算时间戳和前一个时间戳之间的日期差?你知道吗

另外,在函数的末尾,我对其他数据帧重复相同的操作,需要对每个数据帧和每个时间戳的所有TempVal求和这是代码:

frame = [df, df1, df2]


final = pd.concat(frame)
final['FinalVal'] = final.groupby('ID')['TempVal'].cumsum()

最后一部分对于每个df中相同时间戳的每个TempVal的总和是否正确? 非常感谢

编辑:预期输出:

ID    Value   Date       Date_diff_cumsum   visVal  Weight   TempVal
1    0.000 2017-02-13 20:54:00      0.0    0.000    75.0       0.0
1   29.598 2017-02-13 21:02:00      8.0    29.598   75.0       4.31
1  273.000 2017-02-13 22:33:00      91.0   273.000  75.0       4
1  153.000 2017-02-13 23:24:00      59.0   153.000  75.0       3.45
1  136.902 2017-02-14 00:01:00      37.0   136.902  75.0       4.9

在我的最后,因为我什么都没有,因为我被困住了: 从df,df1,df2,每个时间戳的所有TempVal之和,类似于

ID  TempVal1   Date              TempVal2  TempVal3       FinalVal
1   0.000  2017-02-13 20:54:00   0.0       0.000          0.0
1   4.31   2017-02-13 21:02:00   8.0      NaN             12.31
1   4      2017-02-13 22:33:00   91.0     273.000         368
1  3.45    2017-02-13 23:24:00   NaN      153.000         156.45
1  4.9     2017-02-14 00:01:00   37.0     NaN             41.9

其中,如果在一个数据帧中没有时间戳的度量,那么在最后一个数据帧中,它被认为是NaN或0


Tags: 数据lambdaiddfdatevalue时间diff
1条回答
网友
1楼 · 发布于 2024-04-26 15:06:37

我只使用了“Diff”列我使用的数据只是Value&Date

Value Date 0.000 2017-02-1320:54:00 29.598 2017-02-1321:02:00 273.000 2017-02-1322:33:00 153.000 2017-02-1323:24:00 136.902 2017-02-1400:01:00
; 那么下面的代码
from datetime import timedelta
df['diffT']=((pd.to_datetime(df['Date'],format='%Y-%m-%d%H:%M:%S')).diff())//timedelta(minutes=1)

结果如下。检查这是否有用

相关问题 更多 >