熊猫从不同的数据框更新/替换
Posted
技术标签:
【中文标题】熊猫从不同的数据框更新/替换【英文标题】:pandas update/replace from different data frame 【发布时间】:2016-09-11 14:39:54 【问题描述】:我有 2 个数据框:df1 和 df2。 df1 有列 ['UserId', 'company', 'deg'] 并有 100 个观察值。 df2 有列 ['UserId', 'deg'] 并且有 10 个观察值。 df1 和 df2 中的索引与“userId”完美匹配。
我想用 df2 中的更新 df1。 df2 中的 'UserId' 列是 df1 中的 'UserId' 列的子集......所以,没有什么可附加的。仅基于“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,'s-s-ri44','google','none'
45,'har43','CDs','none'
df2
,'UserId','deg'
16,'smith11','BS'
39,'s-s-ri44','MS'
45,'har43','MS'
现在,我想使用 df2 中的信息来更新 df1。如您所见,索引值和 userId 与 df1 中的完全匹配。
有什么建议吗?
谢谢!
【问题讨论】:
【参考方案1】:您可以先将replace
None
转换为NaN
,然后使用fillna
将df1
中的None
值更新为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 's-s-ri44' '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 's-s-ri44' 'google' 'MS'
45 'har43' 'CDs' 'MS'
如果您想通过df1
更新df2
,请使用merge
:
print pd.merge(df2,df1,left_index=True,right_index=True,how='left', on=["'UserId'","'deg'"])
'UserId' 'deg' 'Company'
16 'smith11' 'BS' 'intel'
39 's-s-ri44' 'MS' 'google'
45 'har43' 'MS' 'CDs'
【讨论】:
以上是关于熊猫从不同的数据框更新/替换的主要内容,如果未能解决你的问题,请参考以下文章