你好,我有这个列表:
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)
非常感谢您的宝贵时间,任何帮助都是完美的。
答案 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]