我想使用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列,但我认为它会将值映射到索引匹配的位置......
我没有得到什么?
答案 0 :(得分:6)
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