我坐在一个非常简单的问题面前。我有两个带有一些常见指数的pandas DataFrame,如下所示:
import pandas as pd
x = pd.DataFrame(index=[1, 2, 3, 4],
data={'d': [5, 5, 5, 5]})
y = pd.DataFrame(index=[3, 4, 5, 6],
data={'d': [6, 6, 6, 6]})
我现在要做的是按x
更新y
。这对我来说意味着三件事:
1, 2
仅位于x
而非y
。保留x
。3, 4
是x
和y
中的常见索引。使用y
。5, 6
仅在y
中。将它们各自的值添加到x
。总的来说,结果应如下所示:
x = pd.DataFrame(index=[1, 2, 3, 4, 5, 6],
data={'d': [5, 5, 6, 6, 6, 6]})
根据python词典思考,我尝试了x.update(y)
,它执行了步骤1.和2.但是没有做第3步。
我相信这是一个单行,但我找不到它。
我提到了字典(索引为关键字),方法如下:
a = {1: 5,
2: 5,
3: 5,
4: 5}
b = {3: 6,
4: 6,
5: 6,
7: 6}
a.update(b)
它返回:
{1: 5, 2: 5, 3: 6, 4: 6, 5: 6, 7: 6}
答案 0 :(得分:1)
您可以调用combine_first
但是使用y作为目标,这将覆盖y中缺少的x值:
In [75]:
y.combine_first(x)
Out[75]:
d
1 5
2 5
3 6
4 6
5 6
6 6
您不能使用update
来实现您想要的效果,因为这只会更新现有值:
In [79]:
x.update(y)
x
Out[79]:
d
1 5
2 5
3 6
4 6