Как дать логическое значение, чтобы решить, является ли моя метка времени выходным и выходным или нет в Dataframe в python - PullRequest
0 голосов
/ 08 мая 2019

У меня есть календарь данных, он содержит дату и является праздником или нет.

У меня есть другой датафрейм, содержащий метку даты и времени, и я хочу проверить, у каждого из них выходной или нет (также и по выходным).

Как я мог это сделать?

например, это мой календарь:

  0     2015-01-01           1                       New Year's Day
  1     2015-04-03           1             Good Friday (Karfreitag)
  2     2015-04-05           1         Easter Sunday (Ostersonntag)
  3     2015-04-06           1          Easter Monday (Ostermontag)
  4     2015-04-27           1             King's Day (Netherlands)
  5     2015-05-04           1                      Remembrance Day
  6     2015-05-05           1                       Liberation Day
  7     2015-05-14           1  Ascension Day (Christi Himmelfahrt)
  ... ...

Это мой фрейм данных:

  0     2015-01-01 06:00:00        88  ...        6.0    
  1     2015-01-01 07:00:00        86  ...        5.8    
  2     2015-01-01 08:00:00        86  ...        5.3    
  3     2015-01-01 09:00:00        84  ...        5.5   
  4     2015-01-01 10:00:00        81  ...        5.6     
  5     2015-01-01 11:00:00        78  ...        5.8   
  6     2015-01-01 12:00:00        76  ...        6.0     
  7     2015-01-01 13:00:00        74  ...        5.5     
  8     2015-01-01 14:00:00        73  ...        6.3      
  9     2015-01-01 15:00:00        73  ...        6.5     
  10    2015-01-01 16:00:00        73  ...        6.7     
  11    2015-01-01 17:00:00        73  ...        7.1     
  12    2015-01-01 18:00:00        73  ...        7.6     
  13    2015-01-01 19:00:00        73  ...        8.1     
  14    2015-01-01 20:00:00        74  ...        8.6     
  15    2015-01-01 21:00:00        75  ...        9.1     
  16    2015-01-01 22:00:00        75  ...        9.3     
  17    2015-01-01 23:00:00        78  ...        9.6     
  18    2015-01-02 00:00:00        84  ...        9.8          
  19    2015-01-02 01:00:00        86  ...        9.9    
  20    2015-01-02 02:00:00        87  ...        9.9    

Вот что я хочу:

  0     2015-01-01 06:00:00        88  ...        6.0    1
  1     2015-01-01 07:00:00        86  ...        5.8    1
  2     2015-01-01 08:00:00        86  ...        5.3    1
  3     2015-01-01 09:00:00        84  ...        5.5    1
  4     2015-01-01 10:00:00        81  ...        5.6    1
  5     2015-01-01 11:00:00        78  ...        5.8    1
  6     2015-01-01 12:00:00        76  ...        6.0    1
  7     2015-01-01 13:00:00        74  ...        5.5    1
  8     2015-01-01 14:00:00        73  ...        6.3    1
  9     2015-01-01 15:00:00        73  ...        6.5    1
  10    2015-01-01 16:00:00        73  ...        6.7    1
  11    2015-01-01 17:00:00        73  ...        7.1    1
  12    2015-01-01 18:00:00        73  ...        7.6    1
  13    2015-01-01 19:00:00        73  ...        8.1    1
  14    2015-01-01 20:00:00        74  ...        8.6    1
  15    2015-01-01 21:00:00        75  ...        9.1    1
  16    2015-01-01 22:00:00        75  ...        9.3    1
  17    2015-01-01 23:00:00        78  ...        9.6    1
  18    2015-01-02 00:00:00        84  ...        9.8    0  
  19    2015-01-02 01:00:00        86  ...        9.9    0
  20    2015-01-02 02:00:00        87  ...        9.9    0

Я хочу добавить один столбец и пометить 2015-01-01 как 1 и 2015-01-02 как 0 также, когда дата и время выглядят как выходные отмечен как 1

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Есть несколько способов решить эту проблему.Один с str.contains:

df['Holiday'] = df['date'].dt.date.astype(str).str.contains('|'.join(calendar['date'].astype(str))).astype(int)

print(df)
                  date  val1  val2  Holiday
0  2015-01-01 06:00:00    88   6.0        1
1  2015-01-01 07:00:00    86   5.8        1
2  2015-01-01 08:00:00    86   5.3        1
3  2015-01-01 09:00:00    84   5.5        1
4  2015-01-01 10:00:00    81   5.6        1
5  2015-01-01 11:00:00    78   5.8        1
6  2015-01-01 12:00:00    76   6.0        1
7  2015-01-01 13:00:00    74   5.5        1
8  2015-01-01 14:00:00    73   6.3        1
9  2015-01-01 15:00:00    73   6.5        1
10 2015-01-01 16:00:00    73   6.7        1
11 2015-01-01 17:00:00    73   7.1        1
12 2015-01-01 18:00:00    73   7.6        1
13 2015-01-01 19:00:00    73   8.1        1
14 2015-01-01 20:00:00    74   8.6        1
15 2015-01-01 21:00:00    75   9.1        1
16 2015-01-01 22:00:00    75   9.3        1
17 2015-01-01 23:00:00    78   9.6        1
18 2015-01-02 00:00:00    84   9.8        0
19 2015-01-02 01:00:00    86   9.9        0
20 2015-01-02 02:00:00    87   9.9        0

Примечание Так как вы не включили имена столбцов, я сделал их сам, поэтому вы должныизмените их на правильные.

Объяснение

dt.date возвращает дату без времени:

df['date'].dt.date.head()

0    2015-01-01
1    2015-01-01
2    2015-01-01
3    2015-01-01
4    2015-01-01
Name: date, dtype: object

'|'.join() возвращает даты вашего календаря в виде строки, разделенной каналом |, который является оператором или в regex:

'|'.join(calendar['date'].astype(str))

'2015-01-01|2015-04-03|2015-04-05|2015-04-06|2015-04-27|2015-05-04|2015-05-05|2015-05-14'
0 голосов
/ 08 мая 2019

Чтобы получить 1s из вашего календаря, вы можете объединить dfs, для которого вам нужно создать столбец только с датой (не дата и время) в df, чтобы он соответствовал формату из вашего календаря.

Чтобы узнать, день недели или нет, вы можете проверить это с помощью pandas.DatetimeIndex.dayofweek .

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...