Skip to main content
 首页 » 编程设计

python之如果日期范围介于开始日期和结束日期之间,则将类别附加到列

2025年05月04日15hnrainll

我确信这很简单,但我无法理解它。基本上我有两个数据框,一个大的 df 包含每六小时一次的过程数据,一个较小的 df 包含一个条件编号、一个开始日期和一个结束日期。我需要用与日期范围对应的条件编号填充大数据框的条件列,否则如果日期不在小 df 的任何日期范围之间,则将其留空。所以我的两个框架看起来像这样:

Large df 
Date            P1  P2 
7/1/2019 11:00  102 240 
7/1/2019 17:00  102 247 
7/1/2019 23:00  100 219 
7/2/2019 5:00   107 213 
7/2/2019 11:00  100 226 
7/2/2019 17:00  104 239 
7/2/2019 23:00  110 240 
7/3/2019 5:00   110 232 
7/3/2019 11:00  102 215 
7/3/2019 17:00  103 219 
7/3/2019 23:00  107 243 
7/4/2019 5:00   107 246 
7/4/2019 11:00  103 219 
7/4/2019 17:00  105 220 
7/4/2019 23:00  107 220 
7/5/2019 5:00   107 227 
7/5/2019 11:00  108 208 
7/5/2019 17:00  110 248 
7/5/2019 23:00  107 235 
 
 
Small df 
Condition   Start Time  End Time 
A        7/1/2019 11:00 7/2/2019 5:00 
B        7/3/2019 5:00  7/3/2019 23:00 
C        7/4/2019 23:00 7/5/2019 17:00 

我需要这样的结果:

Date            P1  P2  Cond 
7/1/2019 11:00  102 240 A 
7/1/2019 17:00  102 247 A 
7/1/2019 23:00  100 219 A 
7/2/2019 5:00   107 213 A 
7/2/2019 11:00  100 226  
7/2/2019 17:00  104 239  
7/2/2019 23:00  110 240  
7/3/2019 5:00   110 232 B 
7/3/2019 11:00  102 215 B 
7/3/2019 17:00  103 219 B 
7/3/2019 23:00  107 243 B 
7/4/2019 5:00   107 246  
7/4/2019 11:00  103 219  
7/4/2019 17:00  105 220  
7/4/2019 23:00  107 220 C 
7/5/2019 5:00   107 227 C 
7/5/2019 11:00  108 208 C 
7/5/2019 17:00  110 248 C 
7/5/2019 23:00  107 235  

请您参考如下方法:

你需要:

for i, row in sdf.iterrows(): 
    df.loc[df['Date'].between(row['Start Time'], row['End Time']), 'Cond'] = row['Condition'] 

输出:

                Date    P1  P2  Cond 
0   2019-07-01 11:00:00 102 240 A 
1   2019-07-01 17:00:00 102 247 A 
2   2019-07-01 23:00:00 100 219 A 
3   2019-07-02 05:00:00 107 213 A 
4   2019-07-02 11:00:00 100 226 NaN 
5   2019-07-02 17:00:00 104 239 NaN 
6   2019-07-02 23:00:00 110 240 NaN 
7   2019-07-03 05:00:00 110 232 B 
8   2019-07-03 11:00:00 102 215 B 
9   2019-07-03 17:00:00 103 219 B 
10  2019-07-03 23:00:00 107 243 B 
11  2019-07-04 05:00:00 107 246 NaN 
12  2019-07-04 11:00:00 103 219 NaN 
13  2019-07-04 17:00:00 105 220 NaN 
14  2019-07-04 23:00:00 107 220 C 
15  2019-07-05 05:00:00 107 227 C 
16  2019-07-05 11:00:00 108 208 C 
17  2019-07-05 17:00:00 110 248 C 
18  2019-07-05 23:00:00 107 235 NaN