猿问

从连续两行获取数学值

这是我拥有的数据框


import pandas as pd

import datetime

data = [['A1','String01',45,datetime.date(2018,1,1),datetime.date(2018,3,1)],

['A1','String02',46,datetime.date(2018,3,1),datetime.date(2018,4,29)],

['A1','String03',48,datetime.date(2018,4,29),datetime.date(2018,6,30)],

['A1','String04',51,datetime.date(2018,6,30),datetime.date(2018,12,31)],

['A2','String11',32,datetime.date(2018,1,1),datetime.date(2018,6,1)],

['A2','String12',33,datetime.date(2018,6,1),datetime.date(2018,7,30)],

['A2','String13',54,datetime.date(2018,8,11),datetime.date(2018,12,31)],

['A3','String21',45,datetime.date(2018,1,1),datetime.date(2018,6,1)],

['A3','String22',47,datetime.date(2018,7,1),datetime.date(2018,12,31)],]


cols = ['ID','SomeValue','Price','StartDate','EndDate']


df = pd.DataFrame(data,columns=cols)

print(df)

如果我们打印数据框,我们可以看到从 7/31 到 8/11(查看开始日期和结束日期),ID=A2 的价格缺失。我们有类似的情况,ID=A3


我想要做什么,找出按 ID 分组的 StartDate - EndDate(前几列)。


我的输出应该是这样的:


 ID SomeValue  Price   StartDate     EndDate  NoOfDaysMissing

0  A1  String01     45  2018-01-01  2018-03-01              NaN

1  A1  String02     46  2018-03-01  2018-04-29              0.0

2  A1  String03     48  2018-04-29  2018-06-30              0.0

3  A1  String04     51  2018-06-30  2018-12-31              0.0

4  A2  String11     32  2018-01-01  2018-06-01              NaN

5  A2  String12     33  2018-06-01  2018-07-30              0.0

6  A2  String13     54  2018-08-11  2018-12-31             12.0

7  A3  String21     45  2018-01-01  2018-06-01              NaN

8  A3  String22     47  2018-07-01  2018-12-31             30.0

其中缺少的 NoOfDays 由每个 ID 的 StartDate - EndDate(前一行)计算(按每个 ID 分组)


jeck猫
浏览 143回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答