根据最接近的DateTime合并两个Pandas DataFrames的完整攻略分为以下几个步骤:
首先需要导入必要的库和数据,其中pandas和numpy是必需的库。
具体代码实现如下:
import pandas as pd
import numpy as np
# 读取第一个数据集
df1 = pd.read_excel("data1.xlsx")
# 读取第二个数据集
df2 = pd.read_excel("data2.xlsx")
为了能够比较DateTime的差异,需要将DateTime转换为timestamp格式。具体代码实现如下:
df1['timestamp'] = pd.to_datetime(df1['DateTime']).values.astype(np.int64) // 10**9
df2['timestamp'] = pd.to_datetime(df2['DateTime']).values.astype(np.int64) // 10**9
对于每一行在DataFrame2中,我们需要找到DataFrame1中最接近这一行的时间戳,并将该行合并到DataFrame1中。具体代码实现如下:
# 对df2进行遍历操作
for index, row in df2.iterrows():
# 对df1的时间戳列进行二分查找,寻找最接近该行的时间戳,并返回对应的行数
prev_row = np.searchsorted(df1['timestamp'], row['timestamp'], side='left')
# 将该行合并到找到的行中
df1.loc[prev_row] = pd.concat([df1.loc[prev_row], pd.Series(row)], axis=0)
将DataFrame2的每一行合并到DataFrame1中可能会产生重复的行,因此需要删除重复的行。在这里我们使用DataFrame.drop_duplicates()函数。具体代码实现如下:
df1.drop_duplicates(subset='timestamp', inplace=True)
最后,为了将合并后的DataFrame保持简洁和易于使用,我们需要删除多余的列。具体代码实现如下:
df1.drop(['DateTime', 'timestamp'], axis=1, inplace=True)
最终,合并完成的DataFrame就保存在df1中了。
完整的代码实现如下:
import pandas as pd
import numpy as np
# 读取第一个数据集
df1 = pd.read_excel("data1.xlsx")
# 读取第二个数据集
df2 = pd.read_excel("data2.xlsx")
# 将时间转换为时间戳
df1['timestamp'] = pd.to_datetime(df1['DateTime']).values.astype(np.int64) // 10**9
df2['timestamp'] = pd.to_datetime(df2['DateTime']).values.astype(np.int64) // 10**9
# 通过二分查找寻找最近的时间戳,将DataFrame2合并到DataFrame1中
for index, row in df2.iterrows():
prev_row = np.searchsorted(df1['timestamp'], row['timestamp'], side='left')
df1.loc[prev_row] = pd.concat([df1.loc[prev_row], pd.Series(row)], axis=0)
# 删除重复的行
df1.drop_duplicates(subset='timestamp', inplace=True)
# 删除多余的列
df1.drop(['DateTime', 'timestamp'], axis=1, inplace=True)
以上就是根据最接近的DateTime合并两个Pandas DataFrames的完整攻略。
本文链接:http://task.lmcjl.com/news/17440.html