发布
社区首页 >问答首页 >如何根据一个数据框重命名另一个数据框中的特定列

如何根据一个数据框重命名另一个数据框中的特定列
EN

Stack Overflow用户
提问于 2020-04-22 16:40:58
回答 2查看 41关注 0票数 2

我有一个数据帧如下:

df1: ACCOUNT_NAME Units GM 1. Sejal 12 12 2. Mohata 10 15

另一个数据帧为:

df2: INPUT_FIELD TRANSL 1. ACCOUNT_NAME Account Name 2. GM Gross Margin 3. REVENUE Revenue 4. BU Business Unit

我想将df1的列重命名为df2中的Transl值,前提是这些值存在于INPUT_FIELD中。

我试过了:df1.columns = df1.columns.map(df2.set_index('INPUT_FIELD')['TRANSL'].get)

它将列重命名为:'Account Name',None,'Gross Margin‘

我希望有选择地重命名列,而不使用equal运算符,因为这个表将来可能会增长。

EN

回答 2

Stack Overflow用户

发布于 2020-04-22 16:58:42

可以使用Series.to_dict方法将一系列df2["TRANSL"]转换为字典mappings,然后可以使用DataFrame.rename方法将df1的列重命名,方法是将mappings dict传递给rename方法的columns参数。

使用:

代码语言:javascript
代码运行次数:0
复制
mappings = df2.set_index("INPUT_FIELD")["TRANSL"].to_dict()
df1.rename(columns=mappings, inplace=True)
print(df1)

这将打印:

代码语言:javascript
代码运行次数:0
复制
  Account Name  Units  Gross Margin
0        Sejal     12            12
1       Mohata     10            15
票数 1
EN

Stack Overflow用户

发布于 2020-04-22 17:11:04

您可以很容易地从df2.values构建字典理解

代码语言:javascript
代码运行次数:0
复制
df1.rename(columns={i:j for i,j in df2.values})

提供:

代码语言:javascript
代码运行次数:0
复制
    Account Name  Units  Gross Margin
1.0        Sejal     12            12
2.0       Mohata     10            15

Rename还接受映射程序函数,因此您可以使用:

代码语言:javascript
代码运行次数:0
复制
def mapper(x):
    trans = df2.loc[df2.INPUT_FIELD == x, 'TRANSL']
    return trans.iat[0] if len(trans)>0 else x
df1.rename(columns = mapper)

在我的测试中(使用timeit),它比dict方式要长。只有当df2中有1000多行并且列名在第一行时,它才会更快,因为这样它就不会扫描整个值数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61360810

复制
相关文章

相似问题

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