在Python中将列表与日期进行比较

时间:2018-10-29 14:49:46

标签: python python-3.x pandas numpy date

你好,我有这个列表:

b = [[2018-12-14, 2019-01-11, 2019-01-25, 2019-02-08, 2019-02-22, 2019-07-26],
    [2018-06-14, 2018-07-11, 2018-07-25, 2018-08-08, 2018-08-22, 2019-01-26],
    [2017-12-14, 2018-01-11, 2018-01-25, 2018-02-08, 2018-02-22, 2018-07-26]]

dtype: datetime64[ns]]

,我想知道是否可以将此日期列表与另一个日期进行比较。我正在这样做:

r = df.loc[(b[1] > vdate)]

具有:

vdate = dt.date(2018, 9, 19) 

输出正确,因为它选择满足条件的值。但是问题是我想对所有列表值执行此操作。像这样:

r = df.loc[(b > vdate)] # Without [1]

但是这得到了我期望的错误输出。 我尝试了一些for循环,似乎可以正常工作,但是我不确定:

g = []
for i in range(len(b)):
    r = df.loc[(b[i] > vdate)]
    g.append(r)

非常感谢您的宝贵时间,任何帮助都是完美的。

2 个答案:

答案 0 :(得分:1)

如果要浏览整个列表,请使用以下方法:

ds['new_list'] = ds['list_dates'].apply(function)

使用.apply()方法通过函数处理列表

答案 1 :(得分:1)

一个人可以使用@Joseph Developer所说的apply函数,但是简单的列表理解将不需要您编写函数。以下将为您提供布尔值列表,告诉您每个日期是否大于 vdate

is_after_b = [x > vdate for x in b]

如果要直接将其包含在DataFrame中,则可以编写:

df['is_after_b'] = [ x > vdate for x in df.b]

假设b是df的一列,那么btw将确保b的长度与DataFrame的列匹配。

编辑

我不认为b是列表的列表,您需要使用以下方法来展平b:

flat_b = [item for sublist in b for item in sublist]

现在您可以使用:

is_after_b = [x > vdate for x in flat_b]