我有一个数据框,我想用另一个数据框中的值替换一列中的值。
df = pd.DataFrame({'id1': [1001,1002,1001,1003,1004,1005,1002,1006],
'value1': ["a","b","c","d","e","f","g","h"],
'value3': ["yes","no","yes","no","no","no","yes","no"]})
dfReplace = pd.DataFrame({'id2': [1001,1002],
'value2': ["rep1","rep2"]})
我需要使用带有公共密钥的groupby,而当前的解决方案是使用循环。是否有更优雅(更快)的方法来处理.map(apply)等。我希望initial使用pd.update(),但似乎不是正确的方法。
groups = dfReplace.groupby(['id2'])
for key, group in groups:
df.loc[df['id1']==key,'value1']=group['value2'].values
输出
df
id1 value1 value3
0 1001 rep1 yes
1 1002 rep2 no
2 1001 rep1 yes
3 1003 d no
4 1004 e no
5 1005 f no
6 1002 rep2 yes
7 1006 h no
尝试merge():
输出:
如果您已经将索引设置为id,那么这会更简洁一些,但如果没有,您仍然可以在一行中执行以下操作:
如果分成三行,分别进行重命名和重新索引,可以看到
combine_first()
本身实际上非常简单:相关问题 更多 >
编程相关推荐