python - 如何迭代熊猫数据框并检查日期时间索引中的日期
问题描述
我有一个带有这个日期时间索引的大数据框:
... Date A B
190 2019-09-13 21:50:00 1 2
191 2019-09-13 21:55:00 3 2
192 2019-09-13 22:00:00 1 2
193 2019-09-13 22:05:00 3 2
194 2019-09-13 22:10:00 1 2
195 2019-09-16 06:00:00 1 2
196 2019-09-16 06:05:00 1 2
197 2019-09-16 06:10:00 4 2
198 2019-09-16 06:15:00 1 2
199 2019-09-16 06:20:00 4 2
200 2019-09-16 06:25:00 1 2
.....
Name: Date, dtype: datetime64[ns]
现在我需要计算 A 是否大于或等于 B,但只需要每天第一次。我怎样才能实现这个列表只被每天的第一次点击填充?
count = []
for i in df.index:
if A[i] >= B[i]:
count.append('A is larger than B' + f" on {df.Date[i]}")
根据这个例子,我想要的输出是
A is larger than B on 2019-09-13 21:55:00
A is larger than B on 2019-09-16 06:10:00
解决方案
Series.ge
您可以首先通过(大于或等于,>=
)过滤行boolean indexing
,然后通过Series.dt.date
和获取第一个值GroupBy.first
:
df['Date'] = pd.to_datetime(df['Date'])
m = df['A'].ge(df['B'])
df1 = df[m].groupby(df['Date'].dt.date).first()
print (df1)
Date A B
Date
2019-09-13 2019-09-13 21:55:00 3 2
2019-09-16 2019-09-16 06:10:00 4 2
或按日期创建帮助列,然后使用DataFrame.drop_duplicates
:
df['Date'] = pd.to_datetime(df['Date'])
df['d'] = df['Date'].dt.date
m = df['A'].ge(df['B'])
df1 = df[m].drop_duplicates('d')
print (df1)
Date A B d
191 2019-09-13 21:55:00 3 2 2019-09-13
197 2019-09-16 06:10:00 4 2 2019-09-16
for d in df1.Date:
print ('A is larger than B' + f" on {d}")
A is larger than B on 2019-09-13 21:55:00
A is larger than B on 2019-09-16 06:10:00
推荐阅读
- google-apps-script - GAS - 当网络应用程序部署为“任何拥有 Google 帐户的人”时,我可以获得 Google 登录用户详细信息吗?
- command-line-interface - 使用 Jfrog CLI 定义快照删除
- algorithm - 软堆在任何给定时间最多包含 n/2 次幂 r-3 损坏的项目。怎么会这样?
- c# - 如何将数组绑定到自定义索引器?
- javascript - 无法从 main.js 中的 vue 导入 Vue
- angular - Angular rambda 处理从不可变数组操作返回的只读类型
- javascript - 如何将数据从javascript传递到php?
- sml - 如何在sml中将函数的参数从int转换为real?
- javascript - 访问动态创建的元素的问题
- java - MapStruct,地图继承