使用来自不同数据帧的键重命名和删除列

时间:2021-06-08 18:42:25

标签: python pandas

我正在尝试使用键查找列值来更改列的名称并根据另一个键表删除不相关的列。

例如,我正在尝试使用此键值表:

<头>
国家 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()

1 个答案:

答案 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]]