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

山姆

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

import numpy as np
import pandas as pd

mydata = {'ID1': [1,1,2,3,3,4],
    'ID2': [1,2,3,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为唯一,则为-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.shift和复制IDSeries.duplicated其他-1numpy.where

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

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

mask = mydata['ID1'].duplicated(keep=False)
diff_time = mydata['Date2'].rsub(mydata.groupby('ID1')['Date1'].shift(-1))
mydata['days'] =  np.where(mask, diff_time.dt.days, -1)
print (mydata)
   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    NaN
2    2    3 2012-04-23 2012-04-01   -1.0
4    3    5 2011-08-23 2011-08-24  263.0
3    3    4 2012-05-13 2011-05-18    NaN
5    4    6 2011-08-26 2011-08-29   -1.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在给定列值的情况下对列进行分组和排序

MySQL:如何在给定其他某个列值的情况下选择其中两个列值的组合唯一的行

如何使用两个变量在给定一列的情况下隔离表的行

如何在给定特定条件的情况下将两个表合并在一起 - Oracle SQL

Python:在给定特定键顺序的情况下,如何将两个分组和重塑列表

如何在给定另一个数组的情况下创建一个 Matlab 数组

如何通过一个 SQL 查询在多对一列的情况下合并两个表

如何在有条件的情况下减去熊猫中的两列

在Pandas中,在给定另一列的值的情况下,如何计算该列的值的相对概率?

在给定条件的情况下访问列表在Python中的另一个列表上

如何关联成对的值并在给定第一个值的情况下查找第二个值?

如何在有条件的情况下将一个spark dataframe列分为两列

如何在给定具有条件的数据帧的情况下改变列?

如何在Excel中不更改列名的情况下合并一个列下的多个列?

如何在给定一组值的情况下找到数组中剩余的 % 值?

postgres:在给定条件的情况下如何计算数组列中的不同元素

Python:如何在不删除重复项的情况下将一个数据帧中的列值替换为另一个

按多列分组到一个表中

如何在给定行的情况下在Excel中动态加载列

网格如何在给定起始索引的情况下找到下一行的第一个位置的索引

如何在给定两个点和转折点的情况下制作抛物线?

读取两个文件中的数据,其中一个包含列,并在它们对应的情况下显示数据

Python | 在给定每个索引一定数量范围的情况下,如何将值分组到主列表中的不同列表

如何在Scala中在给定条件的情况下合并两个数据帧中的行?

Python:在给定两个预制函数的情况下,如何有效选择要使用的函数?

在给定列名的情况下按顺序添加列data.frame R

如何在带有SSRS的Sql中按2个不同的列分组并使其在某些情况下具有不同的行为

在给定SQL中其他两个表的键的情况下填充表

如何在给定3个文本文件的情况下从每个文件中查找唯一行