使用来自另一个数据帧中匹配索引的值设置dataframe列

时间:2017-10-23 18:27:10

标签: python pandas

我想使用DF2中匹配索引col2保存的值在DF1的col2中设置值:

DF1:

         col1    col2
index
    0       a
    1       b
    2       c
    3       d
    4       e
    5       f

DF2:

         col1    col2
index
    2       a      x
    3       d      y
    5       f      z

DF1':

         col1    col2
index
    0       a     NaN
    1       b     NaN
    2       c       x
    3       d       y
    4       e     NaN
    5       f       z

如果我只是尝试设置DF1 [' col2'] = DF2 [' col2']那么col2就会显示为DF1'中的所有NaN值。 - 我认为这是因为指数不同。但是,当我尝试使用map()执行以下操作时:

DF1.index.to_series().map(DF2['col2'])

然后我仍然得到相同的NaN列,但我认为它会将值映射到索引匹配的位置......

我没有得到什么?

2 个答案:

答案 0 :(得分:6)

您需要joinassign

df = df1.join(df2['col2'])
print (df)
      col1 col2
index          
0        a  NaN
1        b  NaN
2        c    x
3        d    y
4        e  NaN
5        f    z

或者:

df1 = df1.assign(col2=df2['col2']) 
#same like
#df1['col2'] = df2['col2']
print (df1)

      col1 col2
index          
0        a  NaN
1        b  NaN
2        c    x
3        d    y
4        e  NaN
5        f    z

如果没有匹配且所有值都是NaN,请检查两个df中的索引是否具有相同的dtype:

print (df1.index.dtype)
print (df2.index.dtype)

如果没有,那么使用astype:

df1.index = df1.index.astype(int)
df2.index = df2.index.astype(int)

糟糕的解决方案(检查索引2):

df = df2.combine_first(df1)
print (df)
      col1 col2
index          
0        a  NaN
1        b  NaN
2        a    x
3        d    y
4        e  NaN
5        f    z

答案 1 :(得分:1)

您可以根据索引

简单地连接
df = pd.concat([df1['col1'], df2['col2']],axis = 1)

        col1    col2
index       
0       a   NaN
1       b   NaN
2       c   x
3       d   y
4       e   NaN
5       f   z