Возобновление обратного отсчета на основе другого столбца - PullRequest
0 голосов
/ 09 октября 2018

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

       full dates  Countdown  
0      2008-01-01       3652  
1      2008-01-02       3651  
2      2008-01-03       3650  
3      2008-01-04       3649  
4      2008-01-05       3648  
5      2008-01-06       3647  

Мне нужна переменная обратного отсчета«перезагрузить» через определенные дни.Поэтому я бы хотел один отсчет с 2008-01-01 до 2008-01-03, затем с 2008-01-03 по 2008-01-06 и т. Д.

Желаемый результат:

       full dates  Countdown  
0      2008-01-01       2
1      2008-01-02       1 
2      2008-01-03       0  
3      2008-01-04       2  
4      2008-01-05       1  
5      2008-01-06       0

Мой фрейм данных намного больше, но идея та же: между двумя данными днями я хотел бы начать обратный отсчет, а затем «перезапустить» его в другой день (в примере он «перезапустился» 2008-01-03 и 2008-01-06.

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете сделать это с помощью pd.merge_asof.Создайте DataFrame ваших правых ребер корзины, затем объедините ближайший край и вычислите количество дней до.

import pandas as pd

# Right bin edges for your countdowns. 
dates = ['2008-01-03', '2008-01-06']
df_dates = pd.DataFrame({'date': pd.to_datetime(dates)})

# Convert original DataFrame to datetime
df['full dates'] = pd.to_datetime(df['full dates'])

# Merge and calculate the Countdown value
df = pd.merge_asof(df, df_dates, left_on ='full dates', right_on ='date', direction='forward') 

df['Countdown'] = (df['date']-df['full dates']).dt.days
df = df.drop(columns='date')  # No longer needed

Выход: df

  full dates  Countdown
0 2008-01-01          2
1 2008-01-02          1
2 2008-01-03          0
3 2008-01-04          2
4 2008-01-05          1
5 2008-01-06          0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...