【发布时间】:2021-10-20 09:11:24
【问题描述】:
我有一个 csv 文件(用“|”分隔),其中的数据如下:
|origin|destination|class|eff_start_date|eff_end_date|price
0|A|B|1|2016-01-01|2016-12-31|37.4
1|A|B|2|2016-01-01|2016-12-31|30.4
2|A|C|1|2016-01-01|2016-12-31|94.0
3|A|C|2|2016-01-01|2016-12-31|80.0
4|A|B|1|2017-01-01|2017-12-31|38.4
5|A|B|2|2017-01-01|2017-12-31|31.4
6|A|C|1|2017-01-01|2017-12-31|95.0
7|A|C|2|2017-01-01|2017-12-31|81.0
8|A|C|2|2017-02-01|2017-05-20|82.0
此文件提供特定出发地、目的地的票价。 eff_start_date & eff_end_date 显示特定票价的有效期。
我正在编写代码来验证此文件,以确保任何日期都不应该有 2 个单独的票价值。在上面的示例中,记录 7 和 8 对于相同的出发地、目的地和舱位存在冲突,在 2017 年 2 月至 2017 年 5 月 20 日之间可能有 2 个单独的票价记录。
以下是我的代码的 sn-p,但它不起作用,我无法找出问题所在。
import pandas as pd
df_fares = pd.read_csv('input.csv', sep='|')
df_fares.eff_start_date = pd.to_datetime(df_fares.eff_start_date, format='%Y-%m-%d')
df_fares.eff_end_date = pd.to_datetime(df_fares.eff_end_date, format='%Y-%m-%d')
df_fares['overlap'] = (df_fares.groupby(['origin', 'destination', 'class'])
.apply(lambda x: (x['eff_start_date'].shift() - x['eff_end_date']) > timedelta(0))
.reset_index(drop=True))
【问题讨论】:
-
我不明白逻辑 -
origin,destination和class组合不允许重复或..? -
它们可以重复,但不能用于重叠的日期范围。
标签: python pandas dataframe date