我正在尝试使用键查找列值来更改列的名称并根据另一个键表删除不相关的列。
例如,我正在尝试使用此键值表:
国家 | cat_number | 类别 | category_name |
---|---|---|---|
美国 | 1 | cat_1 | 收入税 |
美国 | 2 | cat_2 | property_tax |
重命名列并删除此数据源中不相关的列:
国家 | cat_1_positive | cat_2_positive | cat_3_positive | cat_1_negative | cat_2_negative | cat_3_negative |
---|---|---|---|---|---|---|
美国 | 0 | 1 | 0 | 1 | 0 | 0 |
美国 | 1 | 1 | 0 | 1 | 0 | 0 |
美国 | 0 | 1 | 0 | 0 | 1 | 0 |
将此作为python中的最终数据框:
国家 | income_tax_positive | property_tax_positive | income_tax_negative | property_tax_positive |
---|---|---|---|---|
美国 | 0 | 1 | 1 | 0 |
美国 | 0 | 1 | 1 | 0 |
美国 | 0 | 1 | 0 | 1 |
换句话说,我只是尝试将 Cat_1 名称映射到其他数据框中相应的长格式 category_name,并删除未出现在键表中的列。
代码示例:
import pandas as pd
dict = {'Country': ['USA', 'USA', 'USA'], 'cat_1_positive': [1, 0, 1], 'cat_2_positive': [0, 1, 1], 'cat_3_positive': [0, 0, 0],'cat_1_negative': [1, 1, 1], 'cat_2_negative': [1, 0, 1], 'cat_3_negative': [0, 0, 0]}
df = pd.DataFrame(dict)
df.head()
key_dict = {'Country': ['USA', 'USA'], 'cat_number': [1, 2], 'category': ['cat_1', 'cat_2'], 'category_name': ['income_tax', 'property_tax']}
key = pd.DataFrame(key_dict)
key.head()
到充满希望的最终版本:
final = {'Country': ['USA', 'USA', 'USA'], 'income_tax_positive': [1, 0, 1], 'property_tax_positive': [0, 1, 1] ,'income_tax_negative': [1, 1, 1], 'property_tax_negative': [1, 0, 1]}
final = pd.DataFrame(final)
final.head()
答案 0 :(得分:0)
想不出更好的方法,但这有效:
def rename_column(col, d):
for k in d:
if k in col:
return col.replace(k, d[k])
return None
d = dict(zip(key["category"], key["category_name"]))
d["Country"] = "Country"
df = df.rename(columns={col: rename_column(col, d) for col in df.columns})
df = df[[c for c in df.columns if c is not None]]