python - Lambda 函数减去 x 和前一个元素
问题描述
我有一个包含一些时间戳的数据框,我需要为每个 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_diff_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 函数以计算时间戳与前一个时间戳之间的 Date_diff_cumsum?
此外,在函数结束时,我对其他数据帧重复相同的操作,并且需要对每个数据帧和每个时间戳的所有 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
在我的finalDf中,因为我什么都没有,因为我被卡住了:从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
解决方案
我只使用“差异”列我使用的数据只是值和日期
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)
结果如下。检查这是否有帮助
Value Date diffT
0.000 2017-02-1320:54:00 NaN
29.598 2017-02-1321:02:00 8.0
273.000 2017-02-1322:33:00 91.0
153.000 2017-02-1323:24:00 51.0
136.902 2017-02-1400:01:00 37.0
推荐阅读
- algorithm - 在优于 O(K*lg N) 的运行时间内反转保序最小完美散列函数
- amazon-web-services - 在创建打包程序 Ubuntu 映像时无法查明错误
- c++ - 使用模数找出2次之间的差异?
- python - 查找 Pandas DataFrame 中满足每一行条件的记录数
- c# - 包更新后将数组传递给postgresql问题
- adonis.js - 无法通过远程/外部连接访问 Adonisjs hello world api
- sql - 如何在 SQL/DB2 中使用数据透视?
- customization - 使用 cytoscape.js 自定义边缘?
- rust - 尝试比较泛型类型
- python - sql获取整个表,然后在python中过滤或在几个查询中获取表