Python 如何使用Pandas查找两个不同日期时间之间的最小值?

Python 如何使用Pandas查找两个不同日期时间之间的最小值?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,(不重复/我的问题完全不同) 我的dataframe如下所示: # [df2] is day based time time2 2017-01-01, 2017-01-01 00:12:00 2017-01-02, 2017-01-02 03:15:00 2017-01-03, 2017-01-03 01:25:00 2017-01-04, 2017-01-04 04:12:00 2017-01-05, 2017-01-

(不重复/我的问题完全不同)

我的
dataframe
如下所示:

# [df2] is day based

time             time2
2017-01-01,      2017-01-01 00:12:00
2017-01-02,      2017-01-02 03:15:00
2017-01-03,      2017-01-03 01:25:00
2017-01-04,      2017-01-04 04:12:00
2017-01-05,      2017-01-05 00:45:00
....

# [df] is minute based

time                     value
2017-01-01 00:01:00,     0.1232
2017-01-01 00:02:00,     0.1232
2017-01-01 00:03:00,     0.1232
2017-01-01 00:04:00,     0.1232
2017-01-01 00:05:00,     0.1232
....
我想在
[df2]
中创建一个名为
time\u val\u min
的新列,该列在
df2['time2']
df2['time2']
中指定的范围内,查找
df2['time']
df2['time2']
之间的
min

我做了什么?

我做了
df2['time\u val\u min']=df[df['time'].dt.hour.between(df2['time'],df2['time'])].min()
,但它不起作用


您能告诉我如何修复它吗?

您可以在日期合并两个数据帧,并过滤时间:

# create the date from the time column
df['date'] = df['time'].dt.normalize()

# merge
new_df = (df.merge(df2, left_on='date',    # left on date
                   right_on='time',        # right on time, if time is purely beginning of days
                   how='right',
                   suffixes=['','_y'])
            .query('time < time2')
            .groupby('date')
            ['time'].min()
            .to_frame(name='time_val_min')
            .merge(df2, right_on='time', left_index=True)
           )

您可以在日期合并两个数据框,并过滤时间:

# create the date from the time column
df['date'] = df['time'].dt.normalize()

# merge
new_df = (df.merge(df2, left_on='date',    # left on date
                   right_on='time',        # right on time, if time is purely beginning of days
                   how='right',
                   suffixes=['','_y'])
            .query('time < time2')
            .groupby('date')
            ['time'].min()
            .to_frame(name='time_val_min')
            .merge(df2, right_on='time', left_index=True)
           )

df
df2
有多长?
df
是从
2017
2018
的基于分钟的数据集,同样地
df2
是从
2107
2018
的每日数据集。然而,我们不需要迭代所有的
df
,因为它取决于
df2
的范围
df
df2
有多长?
df
是从
2017
2018
的基于分钟的数据集,同样
df2
是从
2107
2018
的每日数据集。然而,我们不需要迭代所有
df
,因为它取决于
df2
的范围。我需要
time\u val\u min
列,它是
time
time2
之间的最小值。我还需要
min
值:)我需要
time\u val\u min
列,它是
time
time2
。我还需要
min
值:)