Python 数据帧,计算到下一个指定日期的剩余天数?

Python 数据帧,计算到下一个指定日期的剩余天数?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我目前有一个熊猫数据框,看起来与此类似: Data 2018-07-02 15.60 2018-07-03 16.14 2018-07-09 12.69 2018-07-17 12.06 2018-07-19 12.87 2018-07-27 13.03 2018-08-01 13.15 2018-08-02 12.19 2018-08-07 10.93 2018-08-09 11.27 2018-08-10

我目前有一个熊猫数据框,看起来与此类似:

              Data
2018-07-02    15.60
2018-07-03    16.14
2018-07-09    12.69
2018-07-17    12.06
2018-07-19    12.87
2018-07-27    13.03
2018-08-01    13.15
2018-08-02    12.19
2018-08-07    10.93
2018-08-09    11.27
2018-08-10    13.16
2018-08-16    13.45
2018-08-17    12.64
2018-08-20    12.49
2018-08-21    12.86
2018-08-22    12.25
我还有一份日期清单:

dates = [datetime.datetime(2018, 8, 20, 0, 0),
         datetime.datetime(2018, 8, 1, 0, 0),
         datetime.datetime(2018, 7, 2, 0, 0)]
我希望在我的数据框中添加另一列,名为“Count”。它从日期列表中的最新日期开始计数,并在我的数据框中的datetimeindex与列表中的下一个日期匹配时将其重置。最终结果应如下所示:

              Data     Count     
2018-07-02    15.60    1
2018-07-03    16.14    6 
2018-07-09    12.69    5
2018-07-17    12.06    4
2018-07-19    12.87    3
2018-07-27    13.03    2
2018-08-01    13.15    1
2018-08-02    12.19    7
2018-08-07    10.93    6
2018-08-09    11.27    5
2018-08-10    13.16    4
2018-08-16    13.45    3
2018-08-17    12.64    2 
2018-08-20    12.49    1
在大型数据帧上执行此操作的最有效方法是什么

由和创建的帮助程序使用
系列
,用于交换顺序添加
[::-1]

s = pd.Series(df.index.isin(dates), index=df.index)[::-1].cumsum()
df['Count'] = df.groupby(s).cumcount(ascending=False) + 1
print (df)
             Data  Count
2018-07-02  15.60      1
2018-07-03  16.14      6
2018-07-09  12.69      5
2018-07-17  12.06      4
2018-07-19  12.87      3
2018-07-27  13.03      2
2018-08-01  13.15      1
2018-08-02  12.19      7
2018-08-07  10.93      6
2018-08-09  11.27      5
2018-08-10  13.16      4
2018-08-16  13.45      3
2018-08-17  12.64      2
2018-08-20  12.49      1

编写一个函数,用于查找DateTimeIndex和dates列表之间时间事件的最小差异。在dataframe的索引上应用映射以获取新列

您可以根据自己的需求以适当的方式使用以下代码

def time_diff(i):
    dates = [datetime.datetime(2018, 8, 20, 0, 0),
             datetime.datetime(2018, 8, 1, 0, 0),
             datetime.datetime(2018, 7, 2, 0, 0)]
    diff_values = [ j - i for j in dates if j - i[0] != '-']
    if len(diff_values) > 0:
        return min(diff_values)

dataframe["Count"] = dataframe.index.map(time_diff)