基于另一列重新开始倒计时

2024-04-24 10:45:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,其中有一个名为“倒计时”的变量,它可以倒计时数据框中的天数,即使有些日子有多个条目(行)。你知道吗

       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的示例中,它“重启”)。你知道吗


Tags: 数据示例条目fulldatescountdown倒计时天数
1条回答
网友
1楼 · 发布于 2024-04-24 10:45:08

你可以用pd.merge_asof来做这件事。创建一个DataFrame右边的bin边,然后合并最近的边并计算到的天数。你知道吗

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

相关问题 更多 >