如何将两个pandas数据帧中匹配的索引合并?

3
尽管这似乎是以前曾经问过的问题,但我没有找到有关如何执行此功能的最佳实践信息。
概述:我有两个数据框; 第一个是我称之为完整数据框。它是原始来源,可以这么说。然后我有一个数据框,其中包含原始数据集的某些部分,但具有一些新的或更新的信息。
目标:我希望能够将新数据集的结果应用于原始数据框; 将其值叠加到原始数据集的行/列上。
问题:目前我的问题是我还没有发现使用合并的正确格式来获得我想要的结果。 我要么只得到两个数据框相同的行,要么只返回原始数据集,没有添加新信息。
geoid = pandas.DataFrame({'Address': ['4050 Blake Ct', '1234 w east st'], 
                            'ID': ['789456', '654321'], 
                            'State': ['NV', 'NV'], 
                            'Zip': ['88991', '88991'], 
                            'Ph': ['789456', '456132']})
print(geoid)

          Address      ID State    Zip      Ph
0   4050 Blake Ct  789456    NV  88991  789456
1  1234 w east st  654321    NV  88991  456132


original = pandas.DataFrame({'Address': ['', '1234 w east st', 'PO box 789'], 
                            'ID': ['789456', '654321', '654789'], 
                            'State': ['NV', 'CA', 'CA'], 
                            'Zip': ['88991', '88991', '99663'], 
                            'Ph': ['789456', '456132', '741852']})
print(original)

          Address      ID State    Zip      Ph
0                  789456    NV  88991  789456
1  1234 w east st  654321    NV  88991  456132
2      PO box 789  654789    CA  99663  741852


# This produces the same as the original dataframe, with no changes
df = original.merge(geoid, how='left', on=list(original.columns))

# This keeps only the rows from the geoid dataframe
df = original.merge(geoid, how='right', on=list(original.columns))

# This duplicates the data so that it includes data from both dataframes
df = original.merge(geoid, how='outer', on=list(original.columns))

# This produces an empty dataframe
df = original.merge(geoid, how='inner', on=list(original.columns))

这是我想要的结果: 在geoid数据帧中的索引值为0的位置存在4050 Blake Ct的值,而在原始数据帧中该位置为空。我希望将该值复制到原始数据帧中,覆盖原有值。 **注意:原始数据帧中的空单元格只是可能存在的示例,但不仅限于空单元格。理想情况下,我希望能够“叠加”我的geoid数据帧在原始数据帧上。每个数据帧的索引将始终与条目对应。把geoid数据帧想象成原始数据帧的排序或修剪版本。
    Address      ID State    Zip      Ph
0  4050 Blake Ct   789456    NV  88991  789456
1  1234 w east st  654321    NV  88991  456132
2      PO box 789  654789    CA  99663  741852

有许多方法可以在pandas函数之外完成此操作,但我觉得可能有一种内置于pandas中的方法可以完成此操作,但也许我是错误的。

2个回答

4
你可以使用 pandas.DataFrame.update 方法。
geoid = geoid.set_index('ID')
original = original.set_index('ID')

original.update(geoid)


3

您可以使用 Dataframe.update()

original.update(geoid,join='left')

输出结果:

          Address      ID State    Zip      Ph
0   4050 Blake Ct  789456    NV  88991  789456
1  1234 w east st  654321    NV  88991  456132
2      PO box 789  654789    CA  99663  741852


我之前不熟悉update,甚至不知道它是可用的。谢谢你提供这个信息。 - spareTimeCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接