【发布时间】:2017-04-06 06:07:54
【问题描述】:
问题:我有 2 个数据框 df1 和 df2。我的目标是修改df1,如果在df2 中找到它的一些值,则替换它。
import pandas as pd
# dataframe 1
data = {'A':[90,20,30,25,50,60],
'B':['qq','ee','rr','tt','ii','oo'],
'C':['XX','VV','BB','NN','KK','JJ']}
df1 = pd.DataFrame(data)
# dataframe 2
convert_table = {'X': ['dd','ee','ff','gg','hh','ii','ll','mm','nn','oo','pp','qq','rr','ss','tt','uu'],
'Y': ['DD','VV','FF','GG','HH','KK','LL','MM','NN','JJ','PP','XX','BB','SS','NN','LL'],
'Z': [5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61]}
df2 = pd.DataFrame(convert_table)
# search values of df1 inside of df2 and replace values
for idx1,row1 in df1.iterrows():
for idx2, row2 in df2.iterrows():
if row1['B']==row2['X'] and row1['C']==row2['Y']:
df1.replace(to_replace=row1['B'],value=row2['Z'],inplace=True)
如您所见,我有 2 个 for 循环,我检查是否在 df2 内找到了 df1 (row1) 的通用行。如果满足此条件,则将 row1['B'] 中包含的值替换为 row2['Z'] 中包含的值
因此我得到的结果是(正是我想要的结果):
In [120]: df1
Out[120]:
A B C
0 90 43 XX
1 20 7 VV
2 30 47 BB
3 25 59 NN
4 50 19 KK
5 60 37 JJ
注意 B 列的变化。
问题:您能给我推荐一个更好的方法来编写我的代码吗?我想尽可能快地使用 Pandas 或 Python 提供的内置函数。
注意:数据框中包含的数据仅用于演示目的。
【问题讨论】:
标签: python pandas dataframe replace mapping