迭代地向DataFrame添加各种长度的列

时间:2016-07-11 10:11:06

标签: python dataframe

我的DataFrame df_churn中的分类列(描述)很少,我想将其转换为数值。当然,我想创建一个查找表,因为我最终需要将它们转换回来。

问题是每个列都有不同数量的类别,因此附加到df_categories并不容易,我想不出任何简单的方法。

这是我到目前为止所拥有的。它在第一列后停止,因为长度不同。

cat_clmn = ['CLI_REGION','CLI_PROVINCE','CLI_ORIGIN','cli_origin2','cli_origin3', 'ONE_PRD_TYPE_1']

df_categories = pd.DataFrame()

def categorizer(_clmn):
    for clmn in cat_clmn:
        dict_cat = {key: value for value, key in enumerate(df_churn[clmn].unique())}

        df_categories[clmn] = dict_cat.values()
        df_categories[clmn + '_key'] = dict_cat.keys()

        df_churn[clmn + '_CAT'] = df_churn[clmn].map(dict_cat)

categorizer(cat_clmn)

1 个答案:

答案 0 :(得分:0)

有一个临时解决方案,但我相信它可以更好的方式完成。

df_CLI_REGION = pd.DataFrame()
df_CLI_PROVINCE = pd.DataFrame()
df_CLI_ORIGIN = pd.DataFrame()
df_cli_origin2 = pd.DataFrame() 
df_cli_origin3 = pd.DataFrame()
df_ONE_PRD_TYPE_1 = pd.DataFrame()

cat_clmn = ['CLI_REGION','CLI_PROVINCE','CLI_ORIGIN','cli_origin2','cli_origin3', 'ONE_PRD_TYPE_1']
df_lst = [df_CLI_REGION,df_CLI_PROVINCE,df_CLI_ORIGIN,df_cli_origin2,df_cli_origin3, df_ONE_PRD_TYPE_1]


def categorizer(_clmn):
    for clmn, df in zip(cat_clmn,df_lst):
        d = {key: value for value, key in enumerate(df_churn[clmn].unique())}
        df[clmn] = d.values()
        df[clmn + '_key'] = d.keys()

        df_churn[clmn + '_CAT'] = df_churn[clmn].map(d)

categorizer(cat_clmn)