使用不同的 DataFrame 更改 pandas DataFrame 切片的值

Altering values from a pandas DataFrame slice using different DataFrames

我想使用来自其他具有公共索引的 DataFrame 的切片将值分配给 pandas DataFrame 的列。或多或少类似于在 df1 中创建一个新列,填充来自具有相同索引的另一个 DataFrame 列(在以下示例中为 df2['D'])的值。

示例:我有两个 DataFrame,df1 和 df2。

df1
          A         B
g                    
a  0.286074  0.148268
b  0.271671  0.356847
c  0.155908  0.951075

df2
          C         D
g                    
c  0.218612  0.296498
d  0.382499  0.900638

现在我想向 df1 添加一个新列,其中包含 df2['D'] 中的所有值,这些值在 df1 中具有相同的索引(行)。我知道我可以做这样的事情:

for g in df2.index:
    if g in df1.index.values.tolist():
        df1.loc[g, 'D'] = df2.loc[g, 'D']

df1
          A         B         D
g                              
a  0.286074  0.148268       NaN
b  0.271671  0.356847       NaN
c  0.155908  0.951075  0.296498

并且工作正常!但我认为解决方案太丑陋了,根本没有使用 pandas DataFrame 的强大功能。

我试过做类似下面的事情,但根本没有用:

df1.reindex(df1.index.intersection(df2.index))['D'] = df2['D']

df1
          A         B
g                    
a  0.286074  0.148268
b  0.271671  0.356847
c  0.155908  0.951075

我尝试过使用 loc 或查询做很多其他事情,但是 none 其中的工作。

这个例子是根据我需要处理包含大量数据的表而创建的,这就是我想要优化结果的原因。

提前致谢!

赋值即可

df1['D']=df2.D
df1
          A         B         D
a  0.286074  0.148268       NaN
b  0.271671  0.356847       NaN
c  0.155908  0.951075  0.296498