猿问

如何将两个列表组合到字典中,并手动分配键的值

我有一个函数,它接受一个数据框,进行一些转换,然后将数字和分类列名作为列表返回。


cat_cols, num_cols = Data_Type_And_Transformation(df_data_sample, 'MEAN')


cat_cols = 

['var1_m2_Transform',

 'var2_m2_Transform',

 'var2_m3_Transform',

 'var3_m3_Transform',

 'var5_m3_Transform',

 'var8_m3_Transform',

 'var9_m3_Transform']


num_cols = 

['ttl_change_3m',

 'ttl_change_6m',

 'base_rev_3m',

 'csc_ttl_6m']

然后,我试图创建一个字典,其键将是列名,值将是数据类型-NUM或CAT,如下所示:


attribute_df_benford_cat = pd.DataFrame()

attribute_df_benford_num = pd.DataFrame()


attribute_df_cat['Attribute'] = cat_cols

attribute_df_cat['Type'] = 'CAT'


attribute_df_num['Attribute'] = num_cols

attribute_df_num['Type'] = 'NUM'


attribute_df = attribute_df_cat.append(attribute_df_num)

attribute_df.set_index('Attribute',inplace = True)


attribute_dict = OrderedDict(attribute_df.to_dict('index'))

但这给了我以下形式的格言:


Key                 Type    Size    Value

ttl_change_3m       dict    1       {'Type': 'NUM'}

ttl_change_6m       dict    1       {'Type': 'NUM'}

base_rev_3m         dict    1       {'Type': 'NUM'}

csc_ttl_6m          dict    1       {'Type': 'NUM'}

var1_m2_Transform   dict    1       {'Type': 'CAT'}

var2_m2_Transform   dict    1       {'Type': 'CAT'}

var2_m3_Transform   dict    1       {'Type': 'CAT'}

var3_m3_Transform   dict    1       {'Type': 'CAT'}

var5_m3_Transform   dict    1       {'Type': 'CAT'}

var9_m3_Transform   dict    1       {'Type': 'CAT'}

var8_m3_Transform   dict    1       {'Type': 'CAT'}

而我想要以下格式:


Key                 Type    Size    Value

ttl_change_3m       str     1       NUM

ttl_change_6m       str     1       NUM

base_rev_3m         str     1       NUM

csc_ttl_6m          str     1       NUM

var1_m2_Transform   str     1       CAT

var2_m2_Transform   str     1       CAT

var2_m3_Transform   str     1       CAT

var3_m3_Transform   str     1       CAT

var5_m3_Transform   str     1       CAT

var9_m3_Transform   str     1       CAT

var8_m3_Transform   str     1       CAT

另外,我认为我正在做太多的步骤来获得结果,并且可能会有较短/有效的代码版本来做到这一点。


有人可以帮我吗?


ITMISS
浏览 166回答 1
1回答

慕森卡

我认为您需要np.where,import numpy as np import pandas as pd df=pd.DataFrame({'Key':pd.Series(num_cols+cat_cols)}) df['Value']=np.where(df['Key'].isin(cat_cols), 'CAT','NUM') #print(df)    Key                 Value#   ttl_change_3m       NUM#   ttl_change_6m       NUM#   base_rev_3m         NUM#   csc_ttl_6m          NUM#   var1_m2_Transform   CAT#   var2_m2_Transform   CAT#   var2_m3_Transform   CAT#   var3_m3_Transform   CAT#   var5_m3_Transform   CAT#   var8_m3_Transform   CAT#   var9_m3_Transform   CAT
随时随地看视频慕课网APP

相关分类

Python
我要回答