You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用isin()函数匹配DateTime并合并两个Pandas DataFrame的技术问题求助

解决方法:用Merge合并匹配的列

嘿,我明白你的需求啦——你想把da里存在的DateTime对应的df中的Column1、Column2、Column3合并到da里。你的思路方向是对的,但用isin()之后直接索引df的方式有问题,因为两个数据框的行数不一样,会导致索引不匹配的错误。

问题出在哪?

你生成的filter1是长度为9的布尔数组(对应da的行数),但df有13行,用df.loc[filter1]的时候,布尔数组的长度和df的行数不匹配,会直接报错:ValueError: Boolean array expected for the condition, not int。而且就算不报错,也没法准确把对应的数据映射到da的行上。

正确的做法:用pd.merge()

Pandas的merge()方法就是专门用来做这种基于共同列合并数据框的操作,比isin()更直接高效。你只需要把da作为左表,df作为右表,以DateTime为匹配键,选择left连接方式(保证da的所有行都保留),然后指定要合并的列即可。

修正后的完整代码

import pandas as pd

# 构建da数据框
da = pd.DataFrame()
da['Date'] = ["29/07/2021", "29/07/2021", "30/07/2021", "30/07/2021", "31/07/2021", "31/07/2021", "01/08/2021", "01/08/2021", "02/08/2021"]
da['Time'] = ["06:48:00", "06:59:00", "07:14:00", "08:12:00", "08:42:00", "08:57:00", "05:45:00", "05:55:00", "06:05:00"]
da['DateTime'] = pd.to_datetime(da.pop('Date')) + pd.to_timedelta(da.pop('Time'))
da['DateTime'] = da['DateTime'].dt.strftime('%Y-%m-%d %H:%M')

# 构建df数据框
df = pd.DataFrame()
df['Date'] = ["29/07/2021", "29/07/2021", "29/07/2021", "29/07/2021", "30/07/2021", "30/07/2021", "30/07/2021", "30/07/2021", "31/07/2021", "31/07/2021", "01/08/2021", "01/08/2021", "02/08/2021"]
df['Time'] = ["06:48:00", "06:53:00", "06:56:00", "06:59:00", "07:14:00", "07:18:00", "07:40:00", "08:12:00", "08:42:00", "08:57:00", "05:45:00", "05:55:00", "06:05:00"]
df["Column1"] = [0.011534891, 0.013458399, 0.017792937, 0.018807581, 0.025931434, 0.025163517, 0.026561283, 0.027743659, 0.028854, 0.000383506, 0.000543031, 0.000342, 0.000313769]
df["Column2"] = [8.4021, 8.4421, 8.4993, 8.545, 8.3627, 8.5518, 8.6266, 8.6455, 8.485, 8.545, 8.415, 8.475, 8.505]
df["Column3"] = [0.000270475, 0.000313769, 0.000383506, 0.000414331, 0.000533619, 0.000505081, 0.000533131, 0.000543031, 0.000342, 0.011534891, 0.013458399, 0.025931434, 0.025163517]
df['DateTime'] = pd.to_datetime(df.pop('Date')) + pd.to_timedelta(df.pop('Time'))
df['DateTime'] = df['DateTime'].dt.strftime('%Y-%m-%d %H:%M')

# 合并数据框:保留da的所有行,匹配df中对应DateTime的Column1-3
da_merged = pd.merge(da, df[['DateTime', 'Column1', 'Column2', 'Column3']], on='DateTime', how='left')

# 查看结果
print(da_merged.head(10))

结果说明

运行这段代码后,da_merged会包含da原来的DateTime列,以及匹配到的Column1、Column2、Column3的值。因为你的da里的所有DateTime都能在df中找到,所以不会出现NaN值。如果以后有da里的DateTime在df中不存在的情况,对应的列会填充为NaN,这也是how='left'的优势——不会丢失da的任何行。

内容的提问来源于stack exchange,提问作者HamidRouji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:57:39