import pandas
df1 = pandas.DataFrame(
{
'code': ['001', '001'],
'name': ['test1', 'test1'],
'date': ['2024-01-01', '2024-01-01'],
'value1': [1, 2],
'value2': [1, 2],
'sum': [2, 4]
}
)
df2 = pandas.DataFrame(
{
'code': ['001', '001', '001', '002'],
'name': ['test1', 'test1', 'test1', 'test2'],
'date': ['2024-01-01', '2024-01-01', '2024-01-01', '2024-02-01'],
'value1': [1, 2, 3, 4],
'value2': [1, 2, 3, 4],
'sum': [2, 4, 6, 8]
}
)
result = pandas.merge(df1, df2, on=['code', 'name', 'date'], how='outer', indicator=True)
print(result[['code', 'name', 'date', 'sum_x', 'sum_y', '_merge']])
打印以上数据后,如下图所示。
code name date sum_x sum_y _merge
0 001 test1 2024-01-01 2.0 2 both
1 001 test1 2024-01-01 2.0 4 both
2 001 test1 2024-01-01 2.0 6 both
3 001 test1 2024-01-01 4.0 2 both
4 001 test1 2024-01-01 4.0 4 both
5 001 test1 2024-01-01 4.0 6 both
6 002 test2 2024-02-01 NaN 8 right_only
df2 中添加了两条数据。
我通过很多方法和搜索进行了研究,但我尝试的最接近的是使用合并来创建唯一值并比较它们。
但是我无法创建我想要的输出值。
我的目标是 1:1 比较 df1 和 df2 中创建的内容和丢失的内容。 我一直尝试删除合并期间不必要创建的行值,但没有成功。 我要创建的素材如下。
code name date sum_x sum_y _merge
0 001 test1 2024-01-01 2 2 both
4 001 test1 2024-01-01 4 4 both
5 001 test1 2024-01-01 NaN 6 right_only
6 002 test2 2024-02-01 NaN 8 right_only
我尝试使用重复数据删除和查询来删除不必要的行。 我也尝试创建特征值并比较它们,但无法创建我想要的。 我尝试使用 Stack Overflow 和 gpt 查找信息。
看起来您应该将
sum
列作为键,可以选择在合并之前重命名它们:
result = pandas.merge(df1.rename(columns={'sum': 'sum_x'})
.drop(columns=['value1', 'value2']),
df2.rename(columns={'sum': 'sum_y'})
.drop(columns=['value1', 'value2']),
left_on=['code', 'name', 'date', 'sum_x'],
right_on=['code', 'name', 'date', 'sum_y'],
how='outer', indicator=True)
输出:
code name date sum_x sum_y _merge
0 001 test1 2024-01-01 2.0 2 both
1 001 test1 2024-01-01 4.0 4 both
2 001 test1 2024-01-01 NaN 6 right_only
3 002 test2 2024-02-01 NaN 8 right_only