有没有办法将基于时间的事件划分为python pandas中的小时模板?

苏哈斯·穆切拉(Suhas Mucherla)

我有一个数据帧,其中包含各种事件,包括开始时间和结束时间。例如,在此处输入图片说明

我想要一个输出数据框,它是小时模板(列中的小时数),并且具有相同事件的不同行中的日期。并且在该对应的小时和日期中要填充的值为“ 1”。

在此处输入图片说明

任何帮助,将不胜感激。

耶斯列尔

您可以使用:

df = pd.DataFrame({
        'Event':list('abc'),
        'StartTime':['24-12-19 1:14','22-12-19 0:32','23-12-19 6:00'],
        'EndTime':['24-12-19 6:00','24-12-19 4:32','24-12-19 16:00']
})

df[['StartTime','EndTime']] = df[['StartTime','EndTime']].apply(pd.to_datetime, dayfirst=True)

df1 = (df.melt('Event')
         .set_index('value')
         .groupby('Event')['Event']
         .resample('H')
         .count()
         .reset_index(name='val')
         .assign(val=1, 
                 date=lambda x: x['value'].dt.date, 
                 hour=lambda x: x['value'].dt.hour)
         .set_index(['Event','date','hour'])['val']
         .unstack(fill_value=0)
         .reset_index()
         .rename_axis(None, axis=1)
        )

print (df1)

  Event       date  0  1  2  3  4  5  6  7  ...  14  15  16  17  18  19  20  \
0     a 2019-12-24  0  1  1  1  1  1  1  0  ...   0   0   0   0   0   0   0   
1     b 2019-12-22  1  1  1  1  1  1  1  1  ...   1   1   1   1   1   1   1   
2     b 2019-12-23  1  1  1  1  1  1  1  1  ...   1   1   1   1   1   1   1   
3     b 2019-12-24  1  1  1  1  1  0  0  0  ...   0   0   0   0   0   0   0   
4     c 2019-12-23  0  0  0  0  0  0  1  1  ...   1   1   1   1   1   1   1   
5     c 2019-12-24  1  1  1  1  1  1  1  1  ...   1   1   1   0   0   0   0   

   21  22  23  
0   0   0   0  
1   1   1   1  
2   1   1   1  
3   0   0   0  
4   1   1   1  
5   0   0   0  

[6 rows x 26 columns]

说明

  1. 首先通过DataFrame.apply将两列转换为日期时间to_datetime
  2. 重塑DataFrame.melt-DataFrameGroupBy.resample每组尽可能
  3. 创建新列,DataFrame.assign将的所有值设置val1,日期设置为Series.dt.dateSeries.dt.hour
  4. 最后重塑由DataFrame.set_indexSeries.unstack
  5. 最后通过DataFrame.reset_index清理了一些数据DataFrame.rename_axis

编辑:

对于小时的开始和结束,请使用类似的解决方案-对于小时,请减去下限小时Series.dt.floor,如果还减去开始日期1,则可以first使用resample

#changed times
df = pd.DataFrame({
        'Event':list('abc'),
        'StartTime':['24-12-19 1:20','22-12-19 0:30','23-12-19 6:00'],
        'EndTime':['24-12-19 6:20','24-12-19 4:40','24-12-19 16:00']
})

df[['StartTime','EndTime']] = df[['StartTime','EndTime']].apply(pd.to_datetime, dayfirst=True)

f = lambda x: x['value'].sub(x['value'].dt.floor('H')).dt.total_seconds().div(3600)
df1 = (df.melt('Event')
         .assign(h = f)
         .assign(h = lambda x: x.h.mask(x.variable == 'StartTime', 1 - x.h))
         .set_index('value')
         .groupby('Event')['h']
         .resample('H')
         .first()
         .fillna(1)
         .reset_index(name='h')
         .assign(date=lambda x: x['value'].dt.date, 
                 hour=lambda x: x['value'].dt.hour)
         .set_index(['Event','date','hour'])['h']
         .unstack(fill_value=0)
         .reset_index()
         .rename_axis(None, axis=1)
        )

print (df1)
  Event       date    0         1    2    3         4    5         6    7  \
0     a 2019-12-24  0.0  0.666667  1.0  1.0  1.000000  1.0  0.333333  0.0   
1     b 2019-12-22  0.5  1.000000  1.0  1.0  1.000000  1.0  1.000000  1.0   
2     b 2019-12-23  1.0  1.000000  1.0  1.0  1.000000  1.0  1.000000  1.0   
3     b 2019-12-24  1.0  1.000000  1.0  1.0  0.666667  0.0  0.000000  0.0   
4     c 2019-12-23  0.0  0.000000  0.0  0.0  0.000000  0.0  1.000000  1.0   
5     c 2019-12-24  1.0  1.000000  1.0  1.0  1.000000  1.0  1.000000  1.0   

  14   15   16   17   18   19   20   21   22   23  
0  ...  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  
1  ...  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  
2  ...  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  
3  ...  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  
4  ...  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  
5  ...  1.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  

[6 rows x 26 columns]

编辑1:想法是按分钟重新采样,然后合计小时:

df = pd.DataFrame({
        'Event':list('abc'),
        'StartTime':['20-12-19 18:06','22-12-19 0:32','23-12-19 6:00'],
        'EndTime':['20-12-19 18:07','24-12-19 4:32','24-12-19 16:00']
})

df[['StartTime','EndTime']] = df[['StartTime','EndTime']].apply(pd.to_datetime, dayfirst=True)

f = lambda x: x['value'].sub(x['value'].dt.floor('Min')).dt.total_seconds().div(60)
df1 = (df.melt('Event')
         .assign(h = f)
         .assign(h = lambda x: x.h.mask(x.variable == 'StartTime', 1 - x.h))
         .set_index('value')
         .groupby('Event')['h']
         .resample('Min')
         .first()
         .fillna(1)
         .reset_index(name='h')
         .assign(date=lambda x: x['value'].dt.date, 
                 hour=lambda x: x['value'].dt.hour)
         .groupby(['Event','date','hour'])['h']
         .sum()
         .unstack(fill_value=0)
         .div(60)
          .reset_index()
          .rename_axis(None, axis=1)
        )

print (df1)
  Event        date         0    1    2    3         4    5    6    7    8  \
0     a  2019-12-20  0.000000  0.0  0.0  0.0  0.000000  0.0  0.0  0.0  0.0   
1     b  2019-12-22  0.466667  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
2     b  2019-12-23  1.000000  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
3     b  2019-12-24  1.000000  1.0  1.0  1.0  0.533333  0.0  0.0  0.0  0.0   
4     c  2019-12-23  0.000000  0.0  0.0  0.0  0.000000  0.0  1.0  1.0  1.0   
5     c  2019-12-24  1.000000  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   

     9   10   11   12   13   14   15   16   17        18   19   20   21   22  \
0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.016667  0.0  0.0  0.0  0.0   
1  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
2  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
3  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.000000  0.0  0.0  0.0  0.0   
4  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.000000  1.0  1.0  1.0  1.0   
5  1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0  0.0  0.000000  0.0  0.0  0.0  0.0   

    23  
0  0.0  
1  1.0  
2  1.0  
3  0.0  
4  1.0  
5  0.0  

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法使用 Pandas 将行值拆分为单独的列?

来自分类Dev

有没有办法将事件绑定到javascript中的常规对象?

来自分类Dev

有没有办法将事件绑定到javascript中的常规对象?

来自分类Dev

Python Pandas,有没有办法将date_range分成相等大小的间隔?

来自分类Dev

有没有办法在Python中包含±(正负)?

来自分类Dev

有没有办法在python中禁止舍入?

来自分类Dev

有没有办法将python3中的reportlib中的PDF文件合并?

来自分类Dev

Python-有没有办法将操作(+-* /)存储在列表中或作为变量存储?

来自分类Dev

有没有办法将输入类型包装到C ++中的模板类?

来自分类Dev

有没有办法将变量传递给Django模板中的<div> id?

来自分类Dev

有没有办法在python中列出2个数据时间之间的日期时间范围?

来自分类Dev

有没有办法在python中列出2个数据时间之间的日期时间范围?

来自分类Dev

有没有办法将12个挥杆控件分组到Netbeans IDE中的focusLost事件?

来自分类Dev

有没有办法在不使用python中的sort()的情况下对基于数字的数字进行排序?

来自分类Dev

有没有办法在GTK / GLib中具有精确的定时事件?

来自分类Dev

有没有办法在每个样本中划分具有相同比例类别值的数据集?

来自分类Dev

有没有办法将单行转换为pandas中的列

来自分类Dev

有没有办法将单行转换为pandas中的列

来自分类Dev

有没有办法只显示基于数组的json对象中的选定属性

来自分类Dev

有没有办法将变量绑定到模板工具箱模板?

来自分类Dev

有没有办法在Chrome中的“选择选项元素”上添加事件?

来自分类Dev

有没有办法重新绑定jQuery插件中引用的事件处理程序?

来自分类Dev

有没有办法在C#中捕获Windows通知事件?

来自分类Dev

有没有办法在on_message事件中包含self,message和ctx?

来自分类Dev

有没有办法从OSX获取AIR中的多点触控事件?

来自分类Dev

有没有办法在 View 中触发事件的故事板?

来自分类Dev

有没有办法在 Flutter 中的 onPressed() 事件上切换相机?

来自分类Dev

有没有办法在Python-Pandas中多重过滤Dataframe?

来自分类Dev

有没有办法关闭python中没有文件对象的文件?

Related 相关文章

  1. 1

    有没有办法使用 Pandas 将行值拆分为单独的列?

  2. 2

    有没有办法将事件绑定到javascript中的常规对象?

  3. 3

    有没有办法将事件绑定到javascript中的常规对象?

  4. 4

    Python Pandas,有没有办法将date_range分成相等大小的间隔?

  5. 5

    有没有办法在Python中包含±(正负)?

  6. 6

    有没有办法在python中禁止舍入?

  7. 7

    有没有办法将python3中的reportlib中的PDF文件合并?

  8. 8

    Python-有没有办法将操作(+-* /)存储在列表中或作为变量存储?

  9. 9

    有没有办法将输入类型包装到C ++中的模板类?

  10. 10

    有没有办法将变量传递给Django模板中的<div> id?

  11. 11

    有没有办法在python中列出2个数据时间之间的日期时间范围?

  12. 12

    有没有办法在python中列出2个数据时间之间的日期时间范围?

  13. 13

    有没有办法将12个挥杆控件分组到Netbeans IDE中的focusLost事件?

  14. 14

    有没有办法在不使用python中的sort()的情况下对基于数字的数字进行排序?

  15. 15

    有没有办法在GTK / GLib中具有精确的定时事件?

  16. 16

    有没有办法在每个样本中划分具有相同比例类别值的数据集?

  17. 17

    有没有办法将单行转换为pandas中的列

  18. 18

    有没有办法将单行转换为pandas中的列

  19. 19

    有没有办法只显示基于数组的json对象中的选定属性

  20. 20

    有没有办法将变量绑定到模板工具箱模板?

  21. 21

    有没有办法在Chrome中的“选择选项元素”上添加事件?

  22. 22

    有没有办法重新绑定jQuery插件中引用的事件处理程序?

  23. 23

    有没有办法在C#中捕获Windows通知事件?

  24. 24

    有没有办法在on_message事件中包含self,message和ctx?

  25. 25

    有没有办法从OSX获取AIR中的多点触控事件?

  26. 26

    有没有办法在 View 中触发事件的故事板?

  27. 27

    有没有办法在 Flutter 中的 onPressed() 事件上切换相机?

  28. 28

    有没有办法在Python-Pandas中多重过滤Dataframe?

  29. 29

    有没有办法关闭python中没有文件对象的文件?

热门标签

归档