微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在给定一个滞后差异的情况下减去两列并在Python中按多列分组

如何解决如何在给定一个滞后差异的情况下减去两列并在Python中按多列分组

我有一个包含两个ID列和两个date列的数据,如下所示:

import numpy as np
import pandas as pd

mydata = {'ID1': [1,1,2,3,4],'ID2': [1,4,5,6],'Date1': ['2011-04-23','2011-05-13','2012-04-23','2012-05-13','2011-08-23','2011-08-26'],'Date2': ['2011-04-25','2011-05-23','2012-04-1','2011-05-18','2011-08-24','2011-08-29']
     }
    mydata = pd.DataFrame(mydata)

我想创建一个新列,例如天,如下所示:如果ID1是唯一的,则为-1;如果ID1不是唯一的,则计算Date1(带滞后)和Date2之间的差。下面的代码以某种方式起作用;对于唯一的ID1,它不会产生-1。这也有点奇怪。感谢您提供任何其他解决方案的帮助。

mydata['Date1'] = pd.to_datetime(mydata['Date1'])
mydata['Date2'] = pd.to_datetime(mydata['Date2'])

mydata = mydata.sort_values(['ID1','Date1'],ascending=[True,True])

diff_time = mydata['Date2'].rsub(mydata['Date1'].shift(-1),axis=0)
mydata['days'] = np.where(mydata['ID1']==mydata['ID1'].shift(-1),(diff_time.dt.days*24+diff_time.astype(str).str.split('[ :]').str[2].astype(float))/24,0)

输出

    ID1 ID2  Date1       Date2      days
0   1   1   2011-04-23  2011-04-25  18.0
1   1   2   2011-05-13  2011-05-23  0.0
2   2   3   2012-04-23  2012-04-01  0.0      # 0.0 here should be -1 as ID1 is unique
4   3   5   2011-08-23  2011-08-24  263.0
3   3   4   2012-05-13  2011-05-18  0.0
5   4   6   2011-08-26  2011-08-29  0.0     # 0.0 here should be -1 as ID1 is unique

解决方法

您可以将DataFrameGroupBy.shiftSeries.duplicated中的numpy.where与{{3}}中的string重复使用ID

-1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。