Как добавить столбец даты в фрейме данных, рассчитанный из существующего столбца даты и столбца критериев? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть следующий фрейм данных.
Даты dtype='datetime64[ns, UTC]'

    announce_date  announce_time
0   2013-01-23     After Market Close
1   2013-04-23     Before Market Open
2   2013-07-20     After Market Close

Как мне создать новый столбец, который смещает
announce_date на 1, если announce_time равно "After Market Close".

    announce_date  announce_time          impact_date
0   2013-01-23     After Market Close     2013-01-24
1   2013-04-23     Before Market Open     2013-04-23
2   2013-07-20     After Market Close     2013-07-21

Я могу сделать столбец даты смещения, но не знаю, как применить условие.

import pandas as pd

df['impact_date'] = df['announce_date'] + pd.DateOffset(days=1)

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Создайте логическую маску и сгенерируйте смещения с помощью pd.to_timedelta.

# Convert "announce_date" to datetime if not already done.
# df['announce_date'] = pd.to_datetime(df['announce_date'], errors='coerce')
# Now calculate the offset.
offset = pd.to_timedelta(
    df['announce_time'].eq("After Market Close").astype(int), unit='D')    
df['impact_date'] = df['announce_date'] + offset

print(df)
  announce_date       announce_time impact_date
0    2013-01-23  After Market Close  2013-01-24
1    2013-04-23  Before Market Open  2013-04-23
2    2013-07-20  After Market Close  2013-07-21
0 голосов
/ 07 ноября 2018

Вы можете просто создать цикл while, проходящий через анонс_темпа, как это ...

count = 0
list1 = []
while count != len(df):
    if df.iloc[count,1] == 'After Market Close':
        list1.append(df.iloc[count,0] + pd.DateOffset(days=1))
        count += 1
    else:
        list1.append(df.iloc[count,0])
        count += 1

df['impact_date'] = list1
0 голосов
/ 07 ноября 2018

Вы можете использовать np.where

df ['impact_date'] = df ['announce_date'] + np.where (df ['announce_time'] == "После закрытия рынка", pd.DateOffset (days = 1), pd.DateOffset (days = 0))

Этот ответ содержит подробное объяснение.

...