我有一个数据框,其中有一个名为“ 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。
答案 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