根据日期范围添加列值(如果不是)

时间:2018-11-30 08:06:57

标签: python pandas date dataframe

我在数据框中有一个日期列,并想添加一个称为位置的列。每行中的位置值应取决于其所属的日期范围。

例如,日期11月13日介于11月12日至11月16日之间,因此位置应为Seattle。 11月17日是11月17日至11月18日,必须是纽约。

下面是我要实现的数据框的示例

Dates     | Location (column I want to add)
.............................................
11/12/2017| Seattle
11/13/2017| Seattle
11/14/2017| Seattle
11/15/2017| Seattle
11/16/2017| Seattle
11/17/2017| New York
11/18/2017| New York
11/19/2017| London
11/20/2017| London

1 个答案:

答案 0 :(得分:1)

首先创建带有开始日期和结束日期的位置字典,然后按字典循环并按locbetween设置值:

d = {'Seattle':['2017-11-12','2017-11-16'],
     'New York':['2017-11-17','2017-11-18'],
     'London':['2017-11-19','2017-11-20']}

df['Dates'] = pd.to_datetime(df['Dates'], format='%m/%d/%Y')

for k, (s,e) in d.items():
    df.loc[df['Dates'].between(s,e), 'Loc'] = k

print (df)
       Dates  Location       Loc
0 2017-11-12   Seattle   Seattle
1 2017-11-13   Seattle   Seattle
2 2017-11-14   Seattle   Seattle
3 2017-11-15   Seattle   Seattle
4 2017-11-16   Seattle   Seattle
5 2017-11-17  New York  New York
6 2017-11-18  New York  New York
7 2017-11-19    London    London
8 2017-11-20    London    London

编辑:

d = {'Seattle':[('2017-11-12','2017-11-13'), ('2017-11-15','2017-11-16')],
     'New York':[('2017-11-17','2017-11-18')],
     'London':[('2017-11-19','2017-11-20'), ('2017-11-14','2017-11-14')]}

df['Dates'] = pd.to_datetime(df['Dates'], format='%m/%d/%Y')

for k, v in d.items():
    for s, e in v:
        df.loc[df['Dates'].between(s,e), 'Loc'] = k

print (df)
       Dates  Location       Loc
0 2017-11-12   Seattle   Seattle
1 2017-11-13   Seattle   Seattle
2 2017-11-14   Seattle    London
3 2017-11-15   Seattle   Seattle
4 2017-11-16   Seattle   Seattle
5 2017-11-17  New York  New York
6 2017-11-18  New York  New York
7 2017-11-19    London    London
8 2017-11-20    London    London