我在数据框中有一个日期列,并想添加一个称为位置的列。每行中的位置值应取决于其所属的日期范围。
例如,日期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
答案 0 :(得分:1)
首先创建带有开始日期和结束日期的位置字典,然后按字典循环并按loc
和between
设置值:
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