比较 2 个不同形状的数据帧

comparing 2 dataframes with different shape

提问人:Zahra 提问时间:9/7/2023 更新时间:9/8/2023 访问量:29

问:

我有一些特定日期的观测数据。年、日、月的信息分为 3 个不同的列。并且对湿度、温度和...在其他列中。 另一方面,我连续 5 年每天输出模型。我需要将特定日期的每次测量值与该特定日期的模型输出进行比较。你能帮我做到这一点吗?我观察到的数据是 100 多个日期。

我尝试查找但没有成功

Pandas 数据帧 比较

评论

0赞 Lambda 9/7/2023
您可以尝试使用 (pandas.pydata.org/docs/reference/api/...merge)

答:

0赞 Natália 9/8/2023 #1

@Lambda是正确的,那么使用合并方法是最好的选择。根据您对问题的解释,我创建了具有不同形状的示例数据帧,并将它们合并以比较数据:

import pandas as pd

# Sample observed data
observed_data = {
    'Year': [2021, 2022, 2023],
    'Month': [1, 3, 5],
    'Day': [15, 22, 8],
    'Observed_Moisture': [0.4, 0.45, 0.38],
    'Observed_Temperature': [25.1, 26.5, 24.8]
}

observed_df = pd.DataFrame(observed_data)

# Sample model data 
model_data = {
    'Year': [2021, 2021, 2022, 2022, 2023, 2023],
    'Month': [1, 2, 3, 4, 5, 6],
    'Day': [15, 16, 22, 23, 8, 9],
    'Model_Moisture': [0.42, 0.43, 0.44, 0.45, 0.39, 0.4],
    'Model_Temperature': [25.0, 25.1, 26.2, 26.3, 24.9, 25.0]
}

model_df = pd.DataFrame(model_data)

# Merge the dataframes on 'Year', 'Month', and 'Day' columns
merged_df = observed_df.merge(model_df, on=['Year', 'Month', 'Day'], how='inner')

# Calculate differences for moisture and temperature
merged_df['Moisture_Difference'] = merged_df['Observed_Moisture'] - merged_df['Model_Moisture']
merged_df['Temperature_Difference'] = merged_df['Observed_Temperature'] - merged_df['Model_Temperature']

# Display the resulting dataframe
print(merged_df)

在此代码中,我使用方法根据 、 和 列组合数据帧,确保“内部”合并仅匹配具有匹配日期的行(因此,两个数据帧的形状差异无关紧要)。最后,我正在计算湿度和温度的差异。mergeYearMonthDay

对比结果:

   Year  Month  Day  Observed_Moisture  Observed_Temperature  Model_Moisture  Model_Temperature  Moisture_Difference  Temperature_Difference
0  2021      1   15               0.40                  25.1            0.42               25.0                -0.02                     0.1
1  2022      3   22               0.45                  26.5            0.44               26.2                 0.01                     0.3
2  2023      5    8               0.38                  24.8            0.39               24.9                -0.01                    -0.1

您也可以使用基于迭代的方法(在该方法中迭代每一行并根据某些条件执行操作),但该方法方法更简洁高效,尤其是对于较大的数据集。merge