根据另一栏重新开始倒计时

时间:2018-10-08 23:06:17

标签: python pandas dataframe

我有一个数据框,其中有一个名为“ Countdown”的变量,即使某些日子有多个条目(行),该变量也可以对我的数据框中的日子进行递减计数。

       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年1月1日到2008年1月3日倒数,然后从2008年1月3日到2008年1月6日,等等。

所需的输出:

       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 :(得分:1)

您可以使用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