一列中的差异基于另一列中的差异

2024-10-16 17:22:07 发布

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

如何使用pandas执行以下操作

我有这个数据帧:

weight   |  Date                  |  dateDay
43       | 09/03/2018  08:48:48   |  09/03/2018
30       | 10/03/2018  23:28:48   |  10/03/2018
45       | 12/03/2018  04:21:44   |  12/03/2018
25       | 17/03/2018  00:23:32   |  17/03/2018
35       | 18/03/2018  04:49:01   |  18/03/2018
39       | 19/03/2018  20:14:37   |  19/03/2018

我想要这个:

weight   |  Date                  |  dateDay     |  Fun_Cum
43       | 09/03/2018  08:48:48   |  09/03/2018  |    NULL
30       | 10/03/2018  23:28:48   |  10/03/2018  |    -13
45       | 12/03/2018  04:21:44   |  12/03/2018  |    NULL
25       | 17/03/2018  00:23:32   |  17/03/2018  |    NULL
35       | 18/03/2018  04:49:01   |  18/03/2018  |     10
39       | 19/03/2018  20:14:37   |  19/03/2018  |      4

伪代码:

如果第1天之后没有第1天=>;Fun_Cum为空

其他(体重日)-(体重日-1)

谢谢


Tags: 数据代码gtpandasdatenullweightfun
2条回答
#import pandas as pd
#from datetime import datetime
#to_datetime = lambda d: datetime.strptime(d, '%d/%m/%Y')
#df = pd.read_csv('d.csv', converters={'dateDay': to_datetime})

上面的部分只有当你从文件中读取时,否则它就是你所需要的.shift()

a = df
b = df.shift()
df["Fun_Cum"] = (a.weight - b.weight) * ((a.dateDay - b.dateDay).dt.days ==1)

这是使用^{}^{}的一种方法。您可以获取连续datetime元素和访问^{}属性之间的差异

df['Fun_Cum'] = df['weight'].diff()

df.loc[(df.dateDay - df.dateDay.shift()).dt.days != 1, 'Fun_Cum'] = np.nan

print(df)

   weight       Date    dateDay  Fun_Cum
0      43 2018-03-09 2018-03-09      NaN
1      30 2018-03-10 2018-03-10    -13.0
2      45 2018-03-12 2018-03-12      NaN
3      25 2018-03-17 2018-03-17      NaN
4      35 2018-03-18 2018-03-18     10.0
5      39 2018-03-19 2018-03-19      4.0

相关问题 更多 >