使用不同的DataFrame更改熊猫DataFrame切片的值

时间:2018-12-07 04:00:02

标签: python pandas dataframe slice assign

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

示例:我有两个数据框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或query做其他很多事情,但是它们都不起作用。

此示例是根据我需要处理包含大量数据的表而创建的,这就是为什么我要优化结果的原因。

谢谢!

1 个答案:

答案 0 :(得分:2)

只需分配

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