1
我有一个城市名称的熊猫数据帧和日期如下: Python的大熊猫 - 矢量化的自定义功能,而不是适用
In[34]: df.head(6)
Out[34]:
CITY DATE
0 LONDON 2017-03-12
1 LONDON 2017-03-12
2 PARIS 2014-05-05
3 PARIS 2017-03-12
4 LONDON 2017-03-12
5 NEW-YORK 2017-03-12
我也有另外一个数据帧匹配一个人的城市给定的时间范围(这基本上是说这个人在开始日期和结束日期之间的城市)
In[51]: db.head()
Out[51]:
CITY PERSON START END
0 PARIS ID4 2014-01-01 2017-03-16
1 NEW-YORK ID5 2014-01-07 2016-12-31
2 LONDON ID1 2014-01-01 2016-05-08
3 MONTREAL ID1 2016-05-09 2017-03-16
4 TOKYO ID5 2017-01-01 2017-03-16
我想将列添加到df
,以确定这是人在给定的城市为给定的每一行日期。
我能够使用自定义函数myfunc
实现它,我使用df.apply(lambda x: myfunc(x['CITY'], x['DATE']), axis=1)
将行应用到df
。
myfunc
简单地识别db
正确PERSON
如下:
def myfunc(city, date):
return db.loc[(db.CITY==city) & (db.START <= date) & (db.END >= date), 'PERSON'].values[0]
这种运作良好,但它是非常大的dataframes相当缓慢......我试图在db
数据以某种方式合并到df
或至少在不依赖行方式实现的情况下实现我所做的矢量化版本。 有什么帮助吗?