使用另一个数据帧中的值更新数据框标头

时间:2016-08-14 09:46:10

标签: python pandas dictionary merge

我正在处理人口普查数据(使用Census package)。当我使用人口普查API选择变量时,它们会以原始格式(例如B01001_007)传递,并且我想用标签替换列名(例如男性18到19年)。

我知道这可以通过df.columns = ['男性18到19岁'来完成                                               男性20岁',                                               '男性21岁'] 但这很乏味。

有没有办法做某种类型的映射,它会自动查询我下面的df中的标题?

示例数据:

import pandas as pd
from pandas import DataFrame

variables_table = pd.DataFrame({'variable': ['B01001_007E','B01001_008E','B01001_009E'],
                    'label': ['male 18 to 19 years','male 20 years','male 21 years']
                    })

variables_table

label                   variable
male 18 to 19 years     B01001_007E
male 20 years           B01001_008E
male 21 years           B01001_009E

不洁输出:

df = pd.DataFrame({'B01001_007E': ['100','200','300'],
                                'B01001_008E': ['300','200','100'],
                                'B01001_009E': ['500','100','200']})
df
B01001_007E     B01001_008E     B01001_009E
100             300             500
200             200             100
300             100             200

1 个答案:

答案 0 :(得分:4)

df.rename(columns=variables_table.set_index('variable')['label'])
Out: 
  male 18 to 19 years male 20 years male 21 years
0                 100           300           500
1                 200           200           100
2                 300           100           200

请注意,variables_table.set_index('variable')['label']是一个索引为“变量”的系列。它将对该索引进行映射。

这不是一个现场操作。如果要更改实际数据框,请将其分配回df:df = df.rename(columns=variables_table.set_index('variable')['label'])或使用inplace参数:df.rename(columns=variables_table.set_index('variable')['label'], inplace=True)