pandas - Pandas 中每 12 小时的 dt.floor 计数

标签 pandas

我尝试使用 dt.floor 每 12 小时计算一次 datetime 出现次数,如下所示。 在这里,我创建了一个包含 2 天、间隔为 1 小时的数据框。我有两个关于输出的问题。

  1. 我期望每 12 小时进行一次摘要,即输出 1 中的第一行应该是 12:00,第二行应该是 24:00。相反,我得到 00:00 和 12:00。这是为什么?

  2. 是否可以使用特定时间创建摘要?例如,每隔上午 6 点和下午 6 点进行计数?

代码和输入

input1 = pd.DataFrame(pd.date_range('1/1/2018 00:00:00', periods=48, freq='H'))
input1.columns = ["datetime"]
input1.groupby(input1['datetime'].dt.floor('12H')).count()

输出-1

    datetime
datetime    
2018-01-01 00:00:00 12
2018-01-01 12:00:00 12
2018-01-02 00:00:00 12
2018-01-02 12:00:00 12

输出2

    datetime
datetime    
2018-01-01 06:00:00 6
2018-01-01 18:00:00 12
2018-01-02 06:00:00 12
2018-01-02 18:00:00 6

最佳答案

没有24小时。 pandas 中日期时间的时间部分存在于 [00:00:00, 24:00:00) 范围内,这确保了同一精确时间只有一个表示形式。 (注意关闭)。

import pandas as pd

pd.to_datetime('2012-01-01 24:00:00')
#ParserError: hour must be in 0..23: 2012-01-01 24:00:00

对于从 pd.__version__ == '1.1.0' 开始的第二点,您可以在重新采样时指定 offset 参数。您还可以指定哪一面用于标签。对于旧版本,您需要使用 base 参数。

# pandas < 1.1.0
#input1.resample('12H', on='datetime', base=6).count()

input1.resample('12H', on='datetime', offset='6H').count()
#                     datetime
#datetime                     
#2017-12-31 18:00:00         6
#2018-01-01 06:00:00        12
#2018-01-01 18:00:00        12
#2018-01-02 06:00:00        12
#2018-01-02 18:00:00         6

# Change labels
input1.resample('12H', on='datetime', offset='6H', label='right').count()
#                     datetime
#datetime                     
#2018-01-01 06:00:00         6
#2018-01-01 18:00:00        12
#2018-01-02 06:00:00        12
#2018-01-02 18:00:00        12
#2018-01-03 06:00:00         6

关于pandas - Pandas 中每 12 小时的 dt.floor 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63289803/

相关文章:

python - 将终端输出捕获到 pandas 数据框中,而不创建外部文本文件

Python Pandas 绘制标题名称传递字符串

python - 在组对象上应用 vs 变换

python - 按小时合并两个日期列

python - Pandas - 从行中提取文本

python - 如何根据行值合并两个大小不等的DataFrame

pandas - 使用python从html中提取表数据,其中行存储在div中

python - 如何重命名 pandas 数据框中的条目?

pandas - 如何针对通过 IntervalIndex 定义的列范围计算 2D DataFrame bin 的统计值?

python - 在 pandas DataFrame 中的 applymap() 中使用自定义函数