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)