使用来自另一个数据帧的值更新数据帧标头
Posted
技术标签:
【中文标题】使用来自另一个数据帧的值更新数据帧标头【英文标题】: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
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于使用来自另一个数据帧的值更新数据帧标头的主要内容,如果未能解决你的问题,请参考以下文章
熊猫,我怎样才能避免使用 iterrow (如何根据来自另一个数据帧的值将值分配给数据帧中的新列)
(运行的干净代码)根据来自另一个数据帧的日期间隔和字符串条件获取一个数据帧中的值的平均值