我有一个数据文件: df1
SAP_Name SAP_Class SAP_Sec
Avi 5 C
Rison 6 A
Slesh 7 B
San 8 C
Sud 7 B df2:
Name_Fi Class
Avi 5
Rison 6
Slesh 7 我正在尝试将df2与df1匹配,这样匹配的值应该与df1一样被替换。
SAP_Name SAP_Class
Ankan 5
Rison 6
Slesh 7下面是我正在使用的代码:
d = {}
for col2 in df2.columns:
for col1 in df1.columns:
cond = df2[col2].isin(df1[col1]).all()
if cond:
d[col2] = col1
df2 = df2.rename(columns=d)
print (df2)我能够在一个小文件中获得所需的输出,但是我的实际文件有112444行×446列,要更改的目标文件有3行×35列,在这种情况下,代码运行时间很长。有人能帮帮我吗?
发布于 2018-07-27 05:22:03
在我看来,如果性能很重要,请使用issubset和set
d = {}
for col2 in df2.columns:
for col1 in df1.columns:
cond = set(df2[col2]).issubset(df1[col1])
if cond:
d[col2] = col1
df2 = df2.rename(columns=d)
print (df2)
SAP_Name SAP_Class
0 Avi 5
1 Rison 6
2 Slesh 7编辑:
#create dictioanry of Series without dupes
dfs1 = {col1: df1[col1].drop_duplicates() for col1 in df1.columns}
#print (dfs1)
#create dictionary of sets
set2 = {col2: set(df2[col2]) for col2 in df2.columns}
#print (set2)
#loop buy both dictionaries and find columns for rename
d = {}
for col2, v2 in set2.items():
for col1, v1 in dfs1.items():
cond = v2.issubset(v1)
if cond:
d[col2] = col1
df2 = df2.rename(columns=d)
print (df2)
SAP_Name SAP_Class
0 Avi 5
1 Rison 6
2 Slesh 7发布于 2018-07-27 05:31:26
我会重命名这些列并使用merge。
cols = ['SAP_Name', 'SAP_Class']
df2.set_axis(cols, axis=1, inplace=False).merge(df1[cols])
SAP_Name SAP_Class
0 Avi 5
1 Rison 6
2 Slesh 7https://stackoverflow.com/questions/51551173
复制相似问题