根据共享索引向其他数据框中的所有列添加一列



我试图将数据框df2中一列的值添加到数据框df的所有列。它们共享一个(唯一的)索引,但顺序可能不同。

df = pd.DataFrame({"id":[1,2,3], "value1":[1,2,3], "value2":[4,5,6]}).set_index("id")
df2 = pd.DataFrame({"id":[3,2], "add":[4,5]}).set_index("id")

预期结果:

result = pd.DataFrame({"id":[1,2,3], "value1":[1,2+5,3+4], "value2":[4,5+5,6+4]}).set_index("id")

我可以合并,并添加,但我想知道是否有一个更numpy风格的解决方案。我试过df+df2,结果到处都是NaN

我没有一个傻瓜式的答案,但这里有一个熊猫式的答案:

df = pd.DataFrame({"id":[1,2,3], "value1":[1,2,3], "value2":[4,5,6]}).set_index("id")
df2 = pd.DataFrame({"id":[3,2], "add":[4,5]}).set_index("id")
print(df.update(df + df2))

输出:

value1  value2
id
1        1       4
2        7      10
3        7      10

您可以尝试重新索引df2,然后添加:

df.add(df2['add'].reindex(df.index, fill_value=0), axis=0)

输出:

value1  value2
id                
1        1       4
2        7      10
3        7      10

注意下面的代码抛出了一个错误:

df.add(df2['add'], fill_value=0, axis=0)

最新更新