Pandas 熊猫从不同的数据帧更新/替换

Pandas 熊猫从不同的数据帧更新/替换,pandas,Pandas,我有两个数据帧:df1和df2。df1有列['UserId'、'company'、'deg'],有100个观察值。df2有列['UserId','deg',],有10个观察值。df1和df2中的索引与“userId”完全匹配 我想用df2中的更新df1。df2中的“UserId”列是df1中“UserId”列的子集……因此,没有任何附加内容。仅基于“userId”(和/或普通索引) df1 df2 现在,我想使用df2中的信息来更新df1。如您所见,索引值和用户标识与df1中的完全匹配 有什么建

我有两个数据帧:df1和df2。df1有列['UserId'、'company'、'deg'],有100个观察值。df2有列['UserId','deg',],有10个观察值。df1和df2中的索引与“userId”完全匹配

我想用df2中的更新df1。df2中的“UserId”列是df1中“UserId”列的子集……因此,没有任何附加内容。仅基于“userId”(和/或普通索引)

df1

df2

现在,我想使用df2中的信息来更新df1。如您所见,索引值和用户标识与df1中的完全匹配

有什么建议吗

谢谢

您可以先
None
NaN
,然后使用
df2
更新
df1
中的
None
值:

df1.replace({"'none'": np.nan}, inplace=True)
#or omit '', for me works uncomment version
#df1.replace({"none": np.nan}, inplace=True)

print df1.fillna(df2)

     'UserId' 'Company' 'deg'
6    'john21'     'ibm'  'bs'
12   'mary33'   'cisco'  'ms'
16  'smith11'   'intel'  'BS'
20   'lucy55'   'intel'  'bs'
33  'tanya32'      'fb'  'ms'
39   'ssri44'  'google'  'MS'
45    'har43'     'CDs'  'MS'
另一个解决方案包括:

如果要通过
df1
更新
df2
,请使用:

,'UserId','deg'
16,'smith11','BS'
39,'ssri44','MS'
45,'har43','MS'
df1.replace({"'none'": np.nan}, inplace=True)
#or omit '', for me works uncomment version
#df1.replace({"none": np.nan}, inplace=True)

print df1.fillna(df2)

     'UserId' 'Company' 'deg'
6    'john21'     'ibm'  'bs'
12   'mary33'   'cisco'  'ms'
16  'smith11'   'intel'  'BS'
20   'lucy55'   'intel'  'bs'
33  'tanya32'      'fb'  'ms'
39   'ssri44'  'google'  'MS'
45    'har43'     'CDs'  'MS'
df1.replace({"'none'": np.nan}, inplace=True)

df1.update(df2)
print df1
     'UserId' 'Company' 'deg'
6    'john21'     'ibm'  'bs'
12   'mary33'   'cisco'  'ms'
16  'smith11'   'intel'  'BS'
20   'lucy55'   'intel'  'bs'
33  'tanya32'      'fb'  'ms'
39   'ssri44'  'google'  'MS'
45    'har43'     'CDs'  'MS'
print pd.merge(df2,df1,left_index=True,right_index=True,how='left', on=["'UserId'","'deg'"])
     'UserId' 'deg' 'Company'
16  'smith11'  'BS'   'intel'
39   'ssri44'  'MS'  'google'
45    'har43'  'MS'     'CDs'