根据另一个数据帧的范围从数据帧中选择最小值

2024-09-29 23:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个datafrmedf1作为:

Type    StDt    EnDt
A   1/2/2012    1/4/2012
B   1/6/2012    1/6/2012

我有另一个数据帧df2,所有日期到2019年如下:

             KBWI
Date             
2012-01-02  45.00
2012-01-03  32.00
2012-01-04  14.00
2012-01-05  26.00
2012-01-06  27.00

对于df1中的每一行,我需要使用日期范围StDt,EnDt从df2中提取所有行,并取其最小值以获得以下结果:

Type    StDt    EnDt       Minimum
A   1/2/2012    1/4/2012   14.00
B   1/6/2012    1/6/2012   27.00

由于数据帧很大,我不知道如何有效地进行


Tags: 数据datetypedf1df2minimumendtstdt
1条回答
网友
1楼 · 发布于 2024-09-29 23:31:17

初步准备:将所有相关列和索引转换为datetime

df[['StDt', 'EnDt']] = df[['StDt', 'EnDt']].apply(pd.to_datetime, errors='coerce') 
df2.index = pd.to_datetime(df2.index, errors='coerce')

df

  Type       StDt       EnDt
0    A 2012-01-02 2012-01-04
1    B 2012-01-06 2012-01-06

df2
            KBWI
Date            
2012-01-02  45.0
2012-01-03  32.0
2012-01-04  14.0
2012-01-05  26.0
2012-01-06  27.0

一种简单的方法是使用pd.IntervalIndexgroupby找到最小值:

idx = pd.IntervalIndex.from_arrays(df['StDt'], df['EnDt'], closed='both')
df['Minimum'] = df2['KBWI'].groupby(idx.get_indexer_non_unique(df2.index)).min()
df

  Type       StDt       EnDt  Minimum
0    A 2012-01-02 2012-01-04     14.0
1    B 2012-01-06 2012-01-06     27.0

假设df的索引也是RangeIndex(数值的,单调递增的)

相关问题 更多 >

    热门问题