根据另一个熊猫中开始日期和结束日期列的条件创建新的熊猫数据框

阳光明媚

我在熊猫数据框中有开始日期时间和结束日期时间列,如下所示。

在此处输入图片说明

如果结束日期和时间更改为另一天或另一小时,我需要创建一个新行,开始时间为下一小时的开始时间,结束时间为该小时的结束时间(如果原始结束时间 > 小时)或等于原始数据中的结束时间(如果原始结束时间 < 当前小时)并且很快。得到的预期表如下所示。

在此处输入图片说明

Pandas 是否有可能,因为我的数据在数据框中

阿米特·维克拉姆·辛格

计算之间的差小时Start_TimeEnd_Time(称之为length),然后通过重复每一行length使用倍df.reindex(df.reindex.repeat(...))然后从分配一个计数器0length-1由开始日期创建的每个组中的行,分别。

然后对于Start_Time,只要计数器不为零(即这不是该日期的起始行),将时间四舍五入到计数器hh:00:00并递增hour

对于End_Time,只要计数器不等于length-1(即这是不是该日期的最后一行),设置End_TimeStart_Time不过分,秒复位为59即格式如下:hh:59:59其中,小时是从Start_Time

使用:

df = (pd.DataFrame({
        'Start_Time': ['2019-08-29 17:29:29', 
              '2019-09-04 17:29:25', '2019-09-25 10:16:32'], 
        'End_Time': ['2019-08-29 17:32:18', 
              '2019-09-04 18:14:41', '2019-09-26 13:01:26']}))
df.Start_Time = pd.to_datetime(df.Start_Time)
df.End_Time = pd.to_datetime(df.End_Time)
timeDiff = df.End_Time.dt.floor(freq = 'H') - df.Start_Time.dt.floor(freq = 'H')

df['length'] = (timeDiff.dt.days * 24 + timeDiff.dt.seconds//3600 + 1)

df = df.reindex(df.index.repeat(df['length'])).reset_index(drop = True)
df['counter'] = (df.groupby(df.Start_Time.dt.date)['length']
                        .transform(lambda x: np.arange(x.iloc[0])))

mask = df.counter.eq(0)
(df.Start_Time.where(mask, df.Start_Time.dt.round('H') + 
              pd.to_timedelta(df.counter, unit = 'h'), inplace = True))


mask = df.length.eq(df.counter + 1)
masked_val = ((pd.to_timedelta(1, unit = 'h') + 
                df.Start_Time.dt.floor(freq = 'H'))
              .dt.ceil(freq = 'H') + pd.to_timedelta(-1, unit = 'S'))    

df.End_Time.where(mask, masked_val, inplace = True)
df.drop(columns = df.columns[2:], axis = 1, inplace = True)

输出:

>>> df
              Start_Time            End_Time
0  2019-08-29 17:29:29 2019-08-29 17:32:18
1  2019-09-04 17:29:25 2019-09-04 17:59:59
2  2019-09-04 18:00:00 2019-09-04 18:14:41
3  2019-09-25 10:16:32 2019-09-25 10:59:59
4  2019-09-25 11:00:00 2019-09-25 11:59:59
5  2019-09-25 12:00:00 2019-09-25 12:59:59
...
28 2019-09-26 11:00:00 2019-09-26 11:59:59
29 2019-09-26 12:00:00 2019-09-26 12:59:59
30 2019-09-26 13:00:00 2019-09-26 13:01:26

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一个数据框中的日期条件创建新列

根据日期从另一个数据框中过滤熊猫数据框

根据按日期划分的累积计数创建一个增量计数,该日期按熊猫数据框中的另一个系列划分

熊猫-创建一个日期为一个df的新数据框,并在另一个df中创建人员详细信息

根据开始日期和结束日期在数据框中创建新列

熊猫-从事件的数据框中创建一个10分钟的时间序列,并带有开始和结束日期和时间

根据另一个数据框创建新的熊猫数据框

熊猫根据另一个数据框中的匹配列填充新的数据框列

根据日期时间和大熊猫今天的日期创建一个新列

熊猫:根据另一个数据框中的值在数据框中添加新列

根据熊猫数据框中的另一个列表创建一个列表

熊猫有条件地使用另一个创建新的数据框

根据熊猫中另一列上的值在数据框中创建一个新列

如何根据另一个数据框中的日期时间条件从数据框中选择列的值?

检查另一个熊猫数据框中存在哪些日期的最快方法

如何根据另一个数据框中的条件在数据框中创建新列?

一种遍历行和列的方法(在熊猫数据框中),根据条件选择行和列放入熊猫另一个数据框中

根据熊猫中的另一个数据框更改列中的值

熊猫即使在不同的行上,如何也要创建一个带有开始和结束的新数据框

从另一个日期时间字段创建一个新的日期列 - spark scala 数据框

Power BI 如何根据条件在日期表中创建新列并引用另一个表

使用开始日期和结束日期创建一个新列:Pandas

另一个数据框的熊猫数据框总和日期范围

熊猫:根据条件将数据框中的值替换为另一个数据框中的值

根据来自另一个数据框的查找值创建一个熊猫列

根据给熊猫中另一个数据框中的列赋予的条件对数据框中的列执行操作

根据另一个数据框的列填充熊猫数据框列

在熊猫中按行比较一个日期框架中的日期列值与另一个数据框架中的两个日期列

搜索和查找从另一个数据框中的一个数据框中搜索值,并根据熊猫中的查找值填充新列