首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在目标数据中映射2个数据并替换匹配值的标头

在目标数据中映射2个数据并替换匹配值的标头
EN

Stack Overflow用户
提问于 2018-07-27 05:17:13
回答 2查看 118关注 0票数 2

我有一个数据文件: df1

代码语言:javascript
复制
  SAP_Name  SAP_Class  SAP_Sec
  Avi       5          C 
  Rison     6          A 
  Slesh     7          B 
  San       8          C 
  Sud       7          B 

df2:

代码语言:javascript
复制
Name_Fi Class

Avi     5 
Rison   6 
Slesh   7 

我正在尝试将df2与df1匹配,这样匹配的值应该与df1一样被替换。

代码语言:javascript
复制
SAP_Name  SAP_Class
 Ankan          5
 Rison          6
 Slesh          7

下面是我正在使用的代码:

代码语言:javascript
复制
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列,在这种情况下,代码运行时间很长。有人能帮帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-27 05:22:03

在我看来,如果性能很重要,请使用issubsetset

代码语言:javascript
复制
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

编辑:

代码语言:javascript
复制
#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
票数 2
EN

Stack Overflow用户

发布于 2018-07-27 05:31:26

我会重命名这些列并使用merge。

代码语言:javascript
复制
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          7
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51551173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档