我有2个数据帧:df1和df2。 df1有列[' UserId',' company',' deg']并且有100个观察值。 df2有列[' UserId',' deg']并且有10个观察值。 df1和df2中的索引完全匹配 - ' userId'。
我想用df2中的df1更新df1。 ' UserId' df2中的列是' UserId'的一个子集。 df1中的列....所以,没有什么要追加的。仅基于' userId' (和/或普通索引)。
DF1
,'UserId','Company','deg'
6,'john21','ibm','bs'
12,'mary33','cisco','ms'
16,'smith11','intel','none'
20,'lucy55','intel','bs'
33,'tanya32','fb','ms'
39,'ssri44','google','none'
45,'har43','CDs','none'
DF2
,'UserId','deg'
16,'smith11','BS'
39,'ssri44','MS'
45,'har43','MS'
现在,我想使用df2中的信息来更新df1。如您所见,索引值和userId与df1中的索引值完全匹配。
有什么建议吗?
谢谢!
答案 0 :(得分:1)
您可以先replace
None
改为NaN
,然后使用fillna
更新None
中的df1
值df2
:
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'
update
的另一个解决方案:
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'
如果您希望df2
使用merge
更新df1
:
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'