如何按小时分组日期时间

时间:2019-01-25 17:16:24

标签: python datetime

我试图按小时对日期时间数组进行分组,并返回每个小时的计数。

这是我的列表,其中包含许多日期时间对象。我尝试使用循环来计算有多少小时的日期时间对象具有相同的小时数,但是我找不到找到该方法的方法。

stackoverflow上的其他参考都是将日期存储为我不希望在熊猫中存储的列,因为我的日期时间存储在列表中。

我希望获得一个清单如下的hour_count对象

<script id="vertexShader" type="x-shader/x-vertex">
void main() {
    gl_Position = vec4( position, 1.0 );
}
</script>

<script id="fragmentShader" type="x-shader/x-fragment">
uniform vec2      u_resolution;
uniform float     u_time;
uniform sampler2D texture;
uniform float     fade_size;
uniform float     mask_position;

void main() {
    vec2 vUv = gl_FragCoord.xy/u_resolution.xy;
    
    vec4 color = texture2D(texture, vUv);
                
    float start_p = mask_position-fade_size;
    float end_p   = mask_position+fade_size;
    float p       = mix(fade_size, 1.0-fade_size, vUv.x);
    color.rgba *= 1.0 - smoothstep(start_p, end_p, p);
    if ( color.a < 0.01 )
          discard;

    gl_FragColor = color;
}
</script>

<div id="container"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/100/three.min.js"></script>

2 个答案:

答案 0 :(得分:0)

您可以使用熊猫的助手方法来存储小时数列表,然后使用numpy为每个唯一小时生成唯一计数。

import numpy as np
import pandas as pd

hours = pd.DatetimeIndex(hours).hour
unique_hours, counts = np.unique(hours, return_counts=True)
hour_count = [{ "hour": hour, "count": count } for hour, count in zip(unique_hours, counts)]

pprint(hour_count)

结果

[{'count': 2, 'hour': 1},
 {'count': 1, 'hour': 2},
 {'count': 1, 'hour': 3},
 {'count': 2, 'hour': 4}]

答案 1 :(得分:0)

不使用pandas的最简单方法是使用collections.Counter

from collections import Counter
counts = Counter(h.hour for h in hours)
print(counts)
#Counter({1: 2, 2: 1, 3: 1, 4: 2})

现在只需使用列表理解即可将其重新格式化为所需的输出:

hour_count = [{"hour": h, "count": c} for h, c in counts.items()]
print(hour_count)
#[{'count': 2, 'hour': 1},
# {'count': 1, 'hour': 2},
# {'count': 1, 'hour': 3},
# {'count': 2, 'hour': 4}]