python - 如何根据 Python 中的条件将另一个数据帧中的值分配给当前数据帧?
问题描述
我想根据 DatetimeIndex 条件将数据帧中的值分配给另一个数据帧。
我有这个数据框:(第一)
date importance
2006-12-05 10:35:00 HIGH
2006-12-13 02:40:00 LOW
这个数据框:(第二)
index value
2006-12-05 08:03:01.985 6
2006-12-05 08:11:34.130 7
2006-12-05 08:20:05.959 6
2006-12-05 08:28:38.104 6
2006-12-05 08:37:02.995 6
2006-12-05 08:45:35.140 5
2006-12-05 08:54:06.969 6
2006-12-05 09:02:59.928 6
2006-12-05 09:11:32.072 6
2006-12-05 09:20:03.901 6
2006-12-05 09:28:36.046 5
2006-12-05 09:37:00.937 5
2006-12-05 09:45:33.082 6
2006-12-05 09:54:04.911 6
2006-12-05 10:02:04.889 6
2006-12-05 10:10:37.034 5
2006-12-05 10:19:08.863 6
2006-12-05 10:27:41.008 5
2006-12-05 10:36:04.953 5
2006-12-05 10:44:37.098 5
.
.
.
2006-12-13 02:06:00.898 1
2006-12-13 02:14:33.043 1
2006-12-13 02:23:04.872 1
2006-12-13 02:31:03.904 1
2006-12-13 02:39:36.048 1
2006-12-13 02:48:07.878 2
2006-12-13 02:56:40.022 5
2006-12-13 03:05:04.914 2
2006-12-13 03:13:37.058 3
2006-12-13 03:22:08.888 6
2006-12-13 03:31:03.108 1
2006-12-13 03:39:34.937 1
2006-12-13 03:48:07.081 1
2006-12-13 03:56:38.911 2
2006-12-13 04:05:04.117 3
最终结果应该是这样的:
index value new_value
2006-12-05 08:03:01.985 6
2006-12-05 08:11:34.130 7
2006-12-05 08:20:05.959 6
2006-12-05 08:28:38.104 6
2006-12-05 08:37:02.995 6
2006-12-05 08:45:35.140 5
2006-12-05 08:54:06.969 6
2006-12-05 09:02:59.928 6
2006-12-05 09:11:32.072 6
2006-12-05 09:20:03.901 6
2006-12-05 09:28:36.046 5
2006-12-05 09:37:00.937 5
2006-12-05 09:45:33.082 6
2006-12-05 09:54:04.911 6
2006-12-05 10:02:04.889 6
2006-12-05 10:10:37.034 5
2006-12-05 10:19:08.863 6
2006-12-05 10:27:41.008 5
2006-12-05 10:36:04.953 5 HIGH
2006-12-05 10:44:37.098 5
.
.
.
2006-12-13 02:06:00.898 1
2006-12-13 02:14:33.043 1
2006-12-13 02:23:04.872 1
2006-12-13 02:31:03.904 1
2006-12-13 02:39:36.048 1 LOW
2006-12-13 02:48:07.878 2
2006-12-13 02:56:40.022 5
2006-12-13 03:05:04.914 2
2006-12-13 03:13:37.058 3
2006-12-13 03:22:08.888 6
2006-12-13 03:31:03.108 1
2006-12-13 03:39:34.937 1
2006-12-13 03:48:07.081 1
2006-12-13 03:56:38.911 2
2006-12-13 04:05:04.117 3
我试过这个:
def getNearestDate(items, pivot):
return min(items, key=lambda x: abs(x - pivot))
items = second_df.index
for pivot in first_df.date:
d = getNearestDate(items, pivot)
print(d)
second_df.loc[second_df.index == d, 'new_value'] = first_df.importance
它打印最近的日期:
2006-12-05 10:36:04.953000
2006-12-13 02:39:36.048000
所以在这些日子里,它应该把价值观放在“重要性”上。此外,new_value
列上的所有内容都是 NAN。
你能帮我解决这个问题吗?
解决方案
只需进行这些小改动,希望它会起作用
loc=[]
def getNearestDate(items, pivot):
return min(items, key=lambda x: abs(x - pivot))
items = second_df.index
for pivot in first_df.date:
d = getNearestDate(items, pivot)
loc.append(second_df.set_index('index').index.get_loc(d))
## Adding Data to your second df
second_df['importance']=[]
for index,locations in enumerate(loc):
df['importance'][int(location)]=first_df['importance'][index]
推荐阅读
- prolog - 带分解的 Prolog 练习
- imagemagick - ImageMagick - 部分伽玛校正
- javascript - 获取下拉菜单值的日期时间并将其与文本框日期时间一起添加
- c# - 使用正则表达式验证 SQL 查询
- c# - 在 .NET C# 中忽略 64 位程序集中的 32 位第三方 dll 错误
- ios - 如何通过使用 Ionic1 在 iPhone/iPad 上点击下一个键进入下一个输入?
- mysql - 从现在到一周 MYSQL 从客户那里获得生日
- sql-server - 由于 SQL Server 嵌套循环运算符中的基数估计错误导致的性能问题
- sapui5 - 上传多个员工的集合
- laravel - 如何将查询构建器代码转换为 Eloquent?