首页 > 解决方案 > 如何迭代熊猫数据框并检查日期时间索引中的日期

问题描述

我有一个带有这个日期时间索引的大数据框:

...   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  

标签: pythonpandas

解决方案


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

推荐阅读