【问题标题】:Update dataframe header with values from another dataframe使用来自另一个数据帧的值更新数据帧标头
【发布时间】:2016-12-20 19:52:03
【问题描述】:

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

我知道这可以通过 df.columns = ['male 18 to 19 years', '男性 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

【问题讨论】:

    标签: python pandas dictionary merge


    【解决方案1】:
    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)

    【讨论】:

      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2021-06-19
      • 2020-09-20
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多