を適用し、次のように私は都市の名前と日付を持つパンダのデータフレームを持っている: 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
Iは、所与の都市者が与えられたためであった行ごとに決定するdf
に列を追加したい(それは基本的に、この人は、開始日と終了日との間のこの都市であったと言います)日付。
df.apply(lambda x: myfunc(x['CITY'], x['DATE']), axis=1)
を使用してdf
に行方向に適用するカスタム関数myfunc
を使用してこれを実現できました。次のように
myfunc
は単にdb
正しいPERSON
に識別します。
def myfunc(city, date):
return db.loc[(db.CITY==city) & (db.START <= date) & (db.END >= date), 'PERSON'].values[0]
これはうまく動作しますが、それは非常に大規模なデータフレームのためにかなり遅いです...私は何とかdf
にまたはでdb
データをマージしようとしていました行ごとの実装に頼ることなく、私が行ったことのベクトル化されたバージョンを実装することは、少なくとも可能です。 助けてください?