Python 如何基于另一个数据帧重命名一个数据帧中的特定列
我有一个数据帧,如下所示:Python 如何基于另一个数据帧重命名一个数据帧中的特定列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,如下所示: df1: 账户名称单位总经理 1.塞哈尔12 2.莫哈塔10 15 另一个数据帧为: df2: 输入字段转换 1.帐户名帐户名 2.通用汽车毛利率 3.收入 4.BU业务部门 我想将df1的列重命名为df2中的TRANSL值,如果这些值出现在输入_字段中 我试过: df1.columns=df1.columns.map(df2.set\u index('INPUT\u FIELD')['TRANSL'].get) 它将列重命名为: [“账户名称”,无,“毛利率”] 我
df1:
账户名称单位总经理
1.塞哈尔12
2.莫哈塔10 15
另一个数据帧为:
df2:
输入字段转换
1.帐户名帐户名
2.通用汽车毛利率
3.收入
4.BU业务部门
我想将df1的列重命名为df2中的TRANSL值,如果这些值出现在输入_字段中
我试过:
df1.columns=df1.columns.map(df2.set\u index('INPUT\u FIELD')['TRANSL'].get)
它将列重命名为:
[“账户名称”,无,“毛利率”]
我希望有选择地重命名列,而不使用equal运算符,因为此表将来可能会增长。您可以使用方法转换序列df2[“TRANSL”]
到字典映射
,然后您可以使用方法通过将映射
dict传递到重命名
方法的列
参数来重命名df1
的列
使用:
这张照片是:
Account Name Units Gross Margin
0 Sejal 12 12
1 Mohata 10 15
您可以轻松地从
df2.值构建dict理解:
df1.rename(columns={i:j for i,j in df2.values})
给出:
Account Name Units Gross Margin
1.0 Sejal 12 12
2.0 Mohata 10 15
重命名还接受映射器函数,因此您可以使用:
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多行且列名位于第一行时,它才会更快,因为这样它不会扫描整个值数组。要重命名列,可以在键值对字典中传递df.rename(columns={'Transl':'Units'})
创建字典会增加延迟,我想即时完成,有没有比这更优化的方法?创建字典会增加延迟,我想即时完成,有没有比这更优化的方法?
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)