Python系列-如果介于两个其他系列的值之间(时间)

时间:2018-08-10 02:16:05

标签: python pandas datetime dataframe

我有一个带有日期时间(df1)的数据框。我想知道df1中'col1'中的日期时间是否在另一个数据帧(df2)中两列('lowerbound'和'upperbound')日期时间对之间。

例如:

df1 = pd.to_datetime(['2014-04-09 07:37:00','2015-04-09 07:00:00',
                     '2014-02-02 08:31:00','2014-03-02 08:22:00'])
df1 = pd.DataFrame(df1,columns = ['col1'])

lowerbound = pd.to_datetime(['2014-04-09 07:25:00','2014-02-02 08:30:00',
                     '2015-04-09 06:00:00','2014-03-02 08:12:00'])  
upperbound = pd.to_datetime(['2014-04-09 07:38:00','2014-04-09 07:48:00',
                     '2015-04-09 08:00:00','2014-02-02 08:33:00')
df2 = pd.DataFrame(lowerbound,columns = ['lowerbound'])    
df2['upperbound'] = upperbound

由于以下原因,结果应为[1,1,0,0]

  • df1 ['col1'] [0]在df2 ['lowerbound'] [0]和df2 ['lowerbound'] [0]之间
  • df1 ['col1'] [1]在df2 ['lowerbound'] [2]和df2 ['lowerbound'] [2]之间
  • 尽管df1 ['col1'] [2]在df2 ['lowerbound'] [1]和df2 ['lowerbound'] [3]之间,但df2 ['lowerbound']和df2 ['lowerbound' ]不一样。

谢谢!

2 个答案:

答案 0 :(得分:2)

我相信在这种情况下您需要apply

df1.col1.apply(lambda dat: ((dat>= df2.lowerbound) & (dat <= df2.upperbound)).any())

答案 1 :(得分:2)

您可以将np.greater_thananynp.less_thanimport numpy as np print ((np.greater_equal.outer(df1.col1, df2.lowerbound) & np.less_equal.outer(df1.col1, df2.upperbound)) .any(1).astype(int)) 一起使用在轴= 1上,例如:

[1 1 1 1]

以下是您的数据{{1}}

相关问题