基于字典在 Pandas 中重命名列

26

我有一个pandas DataFrame,并且我想根据另一个我计划用作字典的DataFrame来重命名列。

例如,第一个DataFrame如下:

          AAA   BBB   CCC   DDD
 index   
  1       1     2     3     4
  2       5     6     7     8

我希望使用的第二个DataFrame将作为字典:

           val1    val2
  index
    1      AAA      A7
    2      BBB      B0
    3      CCC      C3
    4      DDD      D1

我希望得到以下结果:

          A7    B0    C3    D1 
 index   
  1       1     2     3     4
  2       5     6     7     8

一开始我想将第一个 DataFrame 重新塑造为长格式,然后与字典 DataFrame 合并,最后再将其重塑为宽格式。然而,我认为这样做效率相当低下,因此我希望使用更有效的方式(如果存在的话)。非常感谢您的帮助。


你只是想根据第二个数据框重命名列吗? - Tadhg McDonald-Jensen
感谢您的回复。是的,这是正确的。根据第二个数据框,更改第一个数据框的列名。 - km1234
你也可以只使用这一行代码:df1.columns=[df2['val2']] - Joe T. Boka
Joe,你在注释中的代码是按位置而非名称重命名,这很少是期望的效果。 - RufusVS
4个回答

49

df.rename有一个名为columns的参数,可以接受字典:

df.rename(columns=dict(zip(df2["val1"], df2["val2"])))

输出:

    A7  B0  C3  D1
0   1   2   3   4
1   5   6   7   8

它返回一个新的DataFrame。您可以使用inplace=True或将其分配回原始DataFrame。


2
更简单的方法是:df1.rename(columns=dict(df2.values))。 - B. M.

14

我认为您可以先从df2创建一个字典,然后通过to_seriesdf1的列创建一个Series,然后使用dictionary进行map

print df1
       AAA  BBB  CCC  DDD
index                    
1        1    2    3    4
2        5    6    7    8

print df2
      val1 val2
index          
1      AAA   A7
2      BBB   B0
3      CCC   C3
4      DDD   D1

d = df2.set_index('val1').to_dict()
print d['val2']
{'AAA': 'A7', 'BBB': 'B0', 'CCC': 'C3', 'DDD': 'D1'}

df1.columns = df1.columns.to_series().map(d['val2'])
print df1
       A7  B0  C3  D1
index                
1       1   2   3   4
2       5   6   7   8

它有效了,再次感谢您的回复和及时性! - km1234

0
df1 = df1.rename(columns=dict(df2.values))

-4
你也可以只使用这一行代码:
df1.columns=[df2['val2']]

输出:

    A7  B0  C3  D1
0   1   2   3   7
1   5   6   7   8

这不是通过字典重命名,即旧名称=>新名称。您的解决方案通过位置重命名列。 - RufusVS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接