合并特定日期范围内的 Pandas DataFrame

我有 2 个数据框。一个用于Invoice Data,另一个用于Promotion Dates。


Invoice Data数据框


+------------+-------------+---------------+

| LocationNo | InvoiceDate | InvoiceAmount |

+------------+-------------+---------------+

|      A     |  01-Jul-20  |       79      |

+------------+-------------+---------------+

|      B     |  01-Jul-20  |       72      |

+------------+-------------+---------------+

|      C     |  01-Jul-20  |       24      |

+------------+-------------+---------------+

|      A     |  02-Jul-20  |       68      |

+------------+-------------+---------------+

|      B     |  02-Jul-20  |       6       |

+------------+-------------+---------------+

|      C     |  02-Jul-20  |       27      |

+------------+-------------+---------------+

|      A     |  03-Jul-20  |       25      |

+------------+-------------+---------------+

|      B     |  03-Jul-20  |       62      |

+------------+-------------+---------------+

|      C     |  03-Jul-20  |       58      |

+------------+-------------+---------------+

|      D     |  03-Jul-20  |       36      |

+------------+-------------+---------------+

|      E     |  03-Jul-20  |       65      |

+------------+-------------+---------------+

|      F     |  03-Jul-20  |       81      |

+------------+-------------+---------------+


df_1 = pd.DataFrame({

    'LocationNo':['A','B','C','A','B','C','A','B','C','D','E','F'],

    'InvoiceDate':['01-Jul-20','01-Jul-20','01-Jul-20','02-Jul-20','02-Jul-20','02-Jul-20',

                  '03-Jul-20','03-Jul-20','03-Jul-20','03-Jul-20','03-Jul-20','03-Jul-20'],

    'InvoiceAmount':[79,72,24,68,6,27,25,62,58,36,65,81]

})


我的任务是根据两个条件合并两个数据帧,并在 满足这些条件时Yes向新列添加值。Promotion

条件如下

  1. LocationNo应该匹配

  2. 应该InvoiceDate位于各自的LocationNoPromotionStart之间PromotionEnd

基本上,仅在和日期InvoiceDate之间进行合并。PromotionStartPromotionEnd


江户川乱折腾
浏览 81回答 1
1回答

缥缈止盈

让我们尝试merge过滤一下:out = df_1.merge(df_2, on='LocationNo', how='left')df_1['Promotion'] = np.where(out['InvoiceDate'].between(out['PromotionStart'], out['PromotionEnd']),                             'Yes', '')输出:   LocationNo InvoiceDate  InvoiceAmount Promotion0           A   01-Jul-20             79       Yes1           B   01-Jul-20             72          2           C   01-Jul-20             24          3           A   02-Jul-20             68       Yes4           B   02-Jul-20              6       Yes5           C   02-Jul-20             27          6           A   03-Jul-20             25          7           B   03-Jul-20             62       Yes8           C   03-Jul-20             58       Yes9           D   03-Jul-20             36       Yes10          E   03-Jul-20             65          11          F   03-Jul-20             81          
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python