gpt4 book ai didi

python - Pandas 'concat/upsert' 数据帧

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:40 31 4
gpt4 key购买 nike

我正在寻找一种有效的方法来根据共享行值在 2 x 数据框中选择匹配行,并将它们插入到一个新的数据框中,我可以使用它来将它们的交集之间的差异映射到第三个略有不同的数据框中比较它们。

**Example:**

DataFrame1
FirstName, City
Mark, London
Mary, Dallas
Abi, Madrid
Eve, Paris
Robin, New York

DataFrame2
FirstName, City
Mark, Berlin
Abi, Delhi
Eve, Paris
Mary, Dallas
Francis, Rome

在数据框中,我在“名称”上有潜在的匹配/重叠,所以它们的交集是:

Mark, Mary, Abi, Eve

从连接中排除的是:

Robin, Francis

我构建了一个数据框,允许比较两者的值:

DataFrameMatch
FirstName_1, FirstName_2, FirstName_Match, City_1, City_2, City_Match

然后插入/更新(upsert)所以我的输出是:

DataFrameMatch
FirstName_1 FirstName_2 FirstName_Match City_1 City_2 City_Match
Mark Mark True London Berlin False
Abi Abi True Madrid Delhi False
Mary Mary True Dallas Dallas True
Eve Eve True Paris Paris True

然后我可以报告两个列表之间的差异,以及哪些特定字段不同。

最佳答案

合并

根据您的输出。您只需要 'FirstName' 匹配的行。然后,您需要另一列来评估城市是否匹配。

d1.merge(d2, on='FirstName', suffixes=['_1', '_2']).eval('City_Match = City_1 == City_2')

FirstName City_1 City_2 City_Match
0 Mark London Berlin False
1 Mary Dallas Dallas True
2 Abi Madrid Delhi False
3 Eve Paris Paris True

详情

你可以做一个简单的merge并结束

  FirstName    City
0 Mary Dallas
1 Eve Paris

默认情况下采用所有公共(public)列。所以我不得不通过 on 参数限制列,因此 on='FirstName'

d1.merge(d2, on='FirstName')

FirstName City_x City_y
0 Mark London Berlin
1 Mary Dallas Dallas
2 Abi Madrid Delhi
3 Eve Paris Paris

这让我们更接近,但现在我想调整这些后缀。

d1.merge(d2, on='FirstName', suffixes=['_1', '_2'])

FirstName City_1 City_2
0 Mark London Berlin
1 Mary Dallas Dallas
2 Abi Madrid Delhi
3 Eve Paris Paris

最后,我将添加一个新列,显示 'city_1' 等于 'city_2' 的评估。我选择使用 pandas.DataFrame.eval。你可以看到上面的结果。

关于python - Pandas 'concat/upsert' 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52521944/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com