如何解决Pandas:使用另一个数据框更改一系列单元格的值
希望你一切顺利。 所以我有两个数据框,我想使用另一个数据框更改特定范围的值,如下所示:
所以我有这两个数据框
Dataframe 1 :
A B C
0 foo 2 3
1 foo 9 nan
2 foo 1 4
3 bar 90 1
4 boo 12 89
Dataframe 2 :
M N O
0 foo 8 19
1 foo 3 8
2 foo 5 nan
3 bar 0 16
4 boo 1 100
所以我想用数据帧 2 中存在的关于 'foo' 项(列 M)的 N 和 O 的值替换数据帧 1 中关于 'foo' 项(列 A)的 B 和 C 的值作为以下:
Dataframe 1 :
A B C
0 foo 8 19
1 foo 3 8
2 foo 5 nan
3 bar 90 1
4 boo 12 89
解决方法
您可以将 pandas.DataFrame.where
与 df1['A']
的条件一起使用:
df1[['B','C']] = df1[['B','C']].where(~df1['A'].eq('foo'),df2[['B','C']])
或者反过来:
df1[['B','C']] = df2[['B','C']].where(df1['A'].eq('foo'),df1[['B','C']])
如果 df2 中的列具有不同的名称,您可以使用 .values
访问底层的 numpy 数组:
df1[['B',df2[['N','O']].values)
,
df1 = pd.DataFrame({'A': ['foo','foo','bar','boo'],'B': [2,9,1,90,12],'C':[3,np.nan,4,89]})
df2 = pd.DataFrame({'A': ['foo','B': [8,3,5,1],'C':[19,8,16,100]})
df1.loc[df1['A']=='foo',['B','C']] = df2[df2['A']=='foo'][['B','C']]
df1
给出:
A B C
0 foo 8 19.0
1 foo 3 8.0
2 foo 5 NaN
3 bar 90 1.0
4 boo 12 89.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。