我尝试使用 dt.floor
每 12 小时计算一次 datetime
出现次数,如下所示。
在这里,我创建了一个包含 2 天、间隔为 1 小时的数据框。我有两个关于输出的问题。
我期望每 12 小时进行一次摘要,即输出 1 中的第一行应该是 12:00,第二行应该是 24:00。相反,我得到 00:00 和 12:00。这是为什么?
是否可以使用特定时间创建摘要?例如,每隔上午 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/