私は2つのデータフレームを持っています.1つ目は次の形式です(日付はdatetimeオブジェクトであることに注意してください):
df = DataFrame('key': [0,1,2,3,4,5],
'date': [date0,date1, date2, date3, date4, date5],
'value': [0,10,20,30,40,50])
2 番目の形式は次のとおりです。
df2 = DataFrame('key': [0,1,2,3,4,5],
'valid_from': [date0, date0, date0, date3, date3, date3],
'valid_to': [date2, date2, date2, date5, date5, date5],
'value': [0, 100, 200, 300, 400, 500])
そして、キーが一致し、日付がvalid_fromとvalid_toの間にある場所に効率的に参加しようとしています。私が思いついたのは次のとおりです。
def map_keys(df2, key, date):
value = df2[df2['key'] == key &
df2['valid_from'] <= date &
df2['valid_to'] >= date]['value'].values[0]
return value
keys = df['key'].values
dates = df['date'].values
keys_dates = zip(keys, dates)
values = []
for key_date in keys_dates:
value = map_keys(df2, key_date[0], key_date[1])
values.append(value)
df['joined_value'] = values
これは機能しているように見えますが、特に洗練されたソリューションとは思えません。このような結合について誰かがより良いアイデアを持っているかどうか疑問に思っていました。
助けてくれてありがとう - 大変感謝しています。