例如,我有一个包含一列城市名称的pandas DataFrame,我已经有一个大的预定义城市名称列表,将用作模型中的虚拟变量。我希望将列表中的每个城市名称添加为新列,然后填充一堆0和1,其中城市名称列中的字符串与虚拟变量的列名称匹配。
从我的角度来看,我需要做一些事情:
for dv in dummy_var_list:
df[dv] = df[df[city_names]==dv]
我不确定这是否是一种有效或正确的方法。我需要加入某种“if”陈述或掩盖,我不确定该怎么做。
即。我有城市名称列表:
['paris','sydney','orlando','milwaukee']
我有一个预定义的假人列表,我需要列出:
['tokyo','berlin','beijing','orlando','paris']
所以有些行不会有任何'1',因为没有匹配,但没关系。
答案 0 :(得分:1)
如果您只对某些城市感兴趣,可以只使用包含您感兴趣的城市的数据框子集,使用pd.dummies
获取虚拟列,然后加入原始数据框:
>>> df
city_names
0 Paris
1 New York
2 Paris
3 Tokyo
4 New York
dummy_var_list = ['Paris', 'New York']
dummy_df = df.join(pd.get_dummies(df.loc[df.city_names.isin(dummy_var_list)],
prefix='', prefix_sep='')).fillna(0)
>>> dummy_df
city_names New York Paris
0 Paris 0.0 1.0
1 New York 1.0 0.0
2 Paris 0.0 1.0
3 Tokyo 0.0 0.0
4 New York 1.0 0.0
修改:如果我理解正确,您需要dummy_var_list
中所有城市的虚拟列,即使它们不会显示在city_names
中你原来的df
。在这种情况下,在上面的代码之后,您可以遍历并为没有显示的城市添加一列零:
>>> df
city_names
0 Paris
1 New York
2 Paris
3 Tokyo
4 New York
dummy_var_list = ['Paris', 'New York', 'Los Angeles']
dummy_df = df.join(pd.get_dummies(df.loc[df.city_names.isin(dummy_var_list)],
prefix='', prefix_sep='')).fillna(0)
for i in dummy_var_list:
if i not in dummy_df.columns:
dummy_df[i] = 0
>>> dummy_df
city_names New York Paris Los Angeles
0 Paris 0.0 1.0 0
1 New York 1.0 0.0 0
2 Paris 0.0 1.0 0
3 Tokyo 0.0 0.0 0
4 New York 1.0 0.0 0
答案 1 :(得分:0)
你可以这样做:
const ERR_CODES = {
INVALID_CONSUMER_ID: {
code: 1000,
message: 'Invalid Consumer ID',
},
INVALID_MOBILE: {
code: 1001,
message: 'Invalid Mobile Number',
},
INVALID_ZIPCODE: {
code: 1002,
message: 'Invalid Zipcode',
},
INVALID_FIRST_NAME: {
code: 1000,
message: 'First Name',
}
};
let keys = Object.keys(ERR_CODES);
let codesMap = {};
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
let obj = ERR_CODES[key];
let code = obj.code;
if (!codesMap[code]) {
codesMap[code] = true
} else {
console.error('Duplicate');
}
}
初始df:
import numpy as np
df = pd.DataFrame(columns=['tokyo','berlin','beijing','orlando','paris'])
df['city'] = ['paris','sydney','orlando','milwaukee']
输出:
tokyo berlin beijing orlando paris city
0 NaN NaN NaN NaN NaN paris
1 NaN NaN NaN NaN NaN sydney
2 NaN NaN NaN NaN NaN orlando
3 NaN NaN NaN NaN NaN milwaukee
for col in df.columns:
df.loc[df['city'] == col, col] = 1
df = df.replace(np.NaN, 0)