Как перебрать pandas фрейм данных и проверить день в datetimeindex - PullRequest
0 голосов
/ 19 июня 2020

У меня есть большой фрейм данных с этим datetimeindex:

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

1 Ответ

1 голос
/ 19 июня 2020

Вы можете сначала отфильтровать строки по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...