Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫数据框保留日期介于两个日期之间的行(单独的列)_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 熊猫数据框保留日期介于两个日期之间的行(单独的列)

Python 熊猫数据框保留日期介于两个日期之间的行(单独的列),python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个数据框,看起来类似于: Price From To 300€ 2020-01-01 2020-01-07 250€ 2020-01-04 2020-01-08 150€ 2020-02-01 2020-02-04 350€ 2020-02-04 2020-02-08 然后我有一个日期列表。例如:list=[2020-01-032020-02-04] 我只想保

我有一个数据框,看起来类似于:

Price        From           To
 300€        2020-01-01     2020-01-07
 250€        2020-01-04     2020-01-08
 150€        2020-02-01     2020-02-04
 350€        2020-02-04     2020-02-08
然后我有一个日期列表。例如:
list=[2020-01-032020-02-04]

我只想保留数据框中日期介于
From
列和
to
列之间的行

因此,在转换之后,我将拥有以下数据帧

Price        From           To
 300€        2020-01-01     2020-01-07
 150€        2020-02-01     2020-02-04
 350€        2020-02-04     2020-02-08
首先,我想到将lambda与apply一起使用,但我认为这不是很有效,因为我的数据集非常大。有没有更简单的方法来处理熊猫


结果将包含在一个数据帧中

让我们尝试一下
numpy广播

x, y = df[['From', 'To']].values.T
a = np.array(['2020-01-03', '2020-02-04'], dtype=np.datetime64)
mask = ((x[:, None] <= a) & (y[:, None] >= a)).any(1)

您能否更精确地指定日期的
列表
?是否保证每行数据帧有一个条目?或者,它是一个两元素列表,您希望将第一个元素与数据框中的
From
和第二个元素to
to
列进行比较?该列表包含以下格式的日期列表:年-月-日(可以是字符串类型或日期类型,如果需要,我可以转换它们)。列表中的日期与数据框中的日期具有相同的格式。数据框中没有NAN值,列表将至少包含一个日期。列表可以包含更多日期。在这个例子中,我只放了2天,但可能是3天甚至4天,好吧,那么列表中的哪个日期应该与数据框中的哪个日期进行比较?或者结果是多个数据帧,列表中的每一项对应一个数据帧?如果我看一下上面给出的示例,我会选择列表中的第一个日期,并保留该日期介于起始日期和结束日期之间的所有行。然后,我将获取列表的第二个日期,然后还保留该日期介于开始日期和结束日期之间的所有行。够清楚吗?很好的解决方案,Shubham!你得到了我的一票!谢谢@DanailPetrov节日快乐!非常感谢你,但是当我应该得到一些真实的时候,我得到的只是面具上的虚假。我不确定我是否理解最后一行(掩码=…)您能提供一点解释吗?@colla Check
df.dtypes
From和
To
列的数据类型应该是
datetime64
,如果不是,您首先需要使用
pd.to_datetime
将它们转换为datetime类型。.我的“收件人”和“发件人”列都转换为datetime64:df['From']=df['From'].astype('datetime64[ns]')
df[mask]

  Price       From         To
0  300€ 2020-01-01 2020-01-07
2  150€ 2020-02-01 2020-02-04
3  350€ 2020-02-04 2020-02-08