根据字典重命名PANDAS中的列

km1*_*234 7 python dictionary pandas

我有一个数据框,我想根据我打算用作字典的另一个数据框重命名列.例如,我作为第一个数据帧的内容是:

          AAA   BBB   CCC   DDD
 index   
  1       1     2     3     4
  2       5     6     7     8
Run Code Online (Sandbox Code Playgroud)

作为第二个我想用作字典的数据框:

           val1    val2
  index
    1      AAA      A7
    2      BBB      B0
    3      CCC      C3
    4      DDD      D1
Run Code Online (Sandbox Code Playgroud)

我想得到的结果如下:

          A7    B0    C3    D1 
 index   
  1       1     2     3     4
  2       5     6     7     8
Run Code Online (Sandbox Code Playgroud)

最初我想将第一个数据帧重新整形为长格式,然后与字典数据帧合并,然后重新整形为宽格式.但是我认为这是非常低效的,所以我想使用更有效的方法(如果存在的话).非常感谢你的帮助.

ayh*_*han 9

df.rename有一个叫做columns接受字典的参数:

df.rename(columns=dict(zip(df2["val1"], df2["val2"])))
Run Code Online (Sandbox Code Playgroud)

日期:

    A7  B0  C3  D1
0   1   2   3   4
1   5   6   7   8
Run Code Online (Sandbox Code Playgroud)

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

  • 或者更简单: df1.rename(columns=dict(df2.values))。 (2认同)

jez*_*ael 8

我觉得你可以先创建dictionarydf2,然后创建Series从列df1to_series您再map使用dictionary:

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
Run Code Online (Sandbox Code Playgroud)