插件窝 干货文章 如何高效合并DataFrame:基于日期和名称的精准数据匹配?

如何高效合并DataFrame:基于日期和名称的精准数据匹配?

DataFrame 匹配 合并 日期 393    来源:    2025-03-14

在Pandas中,合并DataFrame时,如果你需要基于日期和名称进行精准匹配,可以使用merge函数,并指定on参数来指定匹配的列。以下是一个示例,展示如何高效地合并两个DataFrame:

假设你有两个DataFrame:df1df2,它们都有一个日期列date和一个名称列name,并且你想要基于这两个列进行合并。

import pandas as pd

# 示例数据
data1 = {
    'date': ['2023-10-01', '2023-10-02', '2023-10-03'],
    'name': ['Alice', 'Bob', 'Charlie'],
    'value1': [10, 20, 30]
}

data2 = {
    'date': ['2023-10-01', '2023-10-02', '2023-10-03'],
    'name': ['Alice', 'Bob', 'Charlie'],
    'value2': [100, 200, 300]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# 将日期列转换为日期类型
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'])

# 基于日期和名称列进行合并
merged_df = pd.merge(df1, df2, on=['date', 'name'], how='inner')

print(merged_df)

解释:

  1. pd.to_datetime: 将date列转换为日期类型,以确保日期格式一致。
  2. pd.merge: 使用merge函数合并两个DataFrame。on=['date', 'name']指定了基于datename列进行匹配。how='inner'表示只保留两个DataFrame中都存在的匹配行。

输出结果:

        date     name  value1  value2
0 2023-10-01    Alice      10     100
1 2023-10-02      Bob      20     200
2 2023-10-03  Charlie      30     300

其他合并方式:

  • how='left': 保留左边DataFrame的所有行,右边DataFrame中没有匹配的行用NaN填充。
  • how='right': 保留右边DataFrame的所有行,左边DataFrame中没有匹配的行用NaN填充。
  • how='outer': 保留两个DataFrame的所有行,没有匹配的行用NaN填充。

注意事项:

  • 确保日期格式一致,避免因格式不同导致的匹配失败。
  • 如果名称列中有大小写不一致的情况,可以在合并前统一转换为大写或小写。

通过这种方式,你可以高效地基于日期和名称进行精准数据匹配和合并。