我有两个数据帧,第一个是表单(注意日期是datetime对象):
df = DataFrame('key': [0,1,2,3,4,5],
'date': [date0,date1, date2, date3, date4, date5],
'value': [0,10,20,30,40,50])
第二种是:
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])
我正在尝试有效地加入密钥匹配的位置,并且日期介于有效起始和有效结束之间。我想到的是:
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
虽然这似乎完成了工作,但感觉不是一个特别优雅的解决方案。我想知道是否有人有更好的主意加入这样的行列。
谢谢你的帮助-非常感谢。
目前,您可以使用内置的^{} 和boolean indexing在几个步骤中完成此操作。
(注意:
df2
的value
列在合并后作为value_y
访问,因为它与df
中同名的列冲突,并且默认的合并冲突后缀分别是_x, _y
用于左帧和右帧。)下面是一个例子,使用不同的设置来显示如何处理无效日期。
输入
df2
:中间帧
merged
:添加列
joined_value
后df
的最终值:相关问题 更多 >
编程相关推荐