尝试从数据中过滤掉一天,当我尝试运行代码时,我没有得到任何结果(这是不准确的,因为那天有数据)。
这是我正在使用的代码:
a['datetime'] = pd.to_datetime(a['datetime'])
start_date = pd.to_datetime('2019-09-01')
end_date = pd.to_datetime('2019-10-01')
sept = a[a['datetime'].between(start_date, end_date)]
day1 = pd.to_datetime('2019-09-11')
(sept['datetime'] == day1).sum()
这是我的数据样本
3 2019-09-11 06:59:02.715641
13 2019-09-12 11:16:53.061871
24 2019-09-02 06:50:37.347313
27034 2019-09-15 11:57:34.582988
27163 2019-09-01 13:38:34.169917
31708 2019-09-17 07:45:50.693893
32883 2019-09-06 13:27:56.161920
33645 2019-09-17 10:02:11.010567
33657 2019-09-01 15:55:42.492608
57825 2019-09-17 11:25:19.405100
57836 2019-09-04 20:12:10.853341
57837 2019-09-04 20:12:00.959338
答案 0 :(得分:1)
您可以使用.loc
来过滤所需的行并汇总相关列。
因为您没有向我们显示您的列名,所以我假设它们是col_1
和col_2
因此,我们可以执行以下操作:
print(df.loc[df['col_2'].dt.normalize() == '2019-09-11'])
col_1 col_2
3 2019-09-11 06:59:02.715641
然后,要访问相关列以获取总和,我们可以使用.sum()
df.loc[df['col_2'].dt.normalize() == '2019-09-11']['col_1'].sum()
out : 3
dt.normalize()
仅返回datetime列的日期值,这是因为01-01-2001
不是==
至01-01-2001 23:59
如果我们打印以下内容:
print(df['col_2'].dt.normalize())
0 2019-09-11
1 2019-09-12
2 2019-09-02
3 2019-09-15
4 2019-09-01
5 2019-09-17
6 2019-09-06
7 2019-09-17
8 2019-09-01
9 2019-09-17
10 2019-09-04
11 2019-09-04
Name: 1, dtype: datetime64[ns]
请注意,dt.normalize()
将数据类型保留为datetime
,因此您可以使用进一步的datetime
操作。
答案 1 :(得分:0)
当您指定sept['datetime'] == day1
时,您正在比较包含时间的Timestamp
。因此,您没有检查是否有9月11日的数据,而是在确切的午夜检查了9月11日的数据。
您可以像上面一样使用.between
函数