我有一个Pandas的数据框:
import pandas as pd
# assign data of lists.
data = {'Gender': ['M', 'F', 'M', 'F','M', 'F','M', 'F','M', 'F','M', 'F'],
'Employment': ['R','U', 'E','R','U', 'E','R','U', 'E','R','U', 'E'],
'Age': ['Y','M', 'O','Y','M', 'O','Y','M', 'O','Y','M', 'O']
}
# Create DataFrame
df = pd.DataFrame(data)
df
我想要的是为每个现有列的每个类别创建一个新列,格式如下:
Gender_M -> for when the gender equals M
Gender_F -> for when the gender equal F
Employment_R -> for when employment equals R
Employment_U -> for when employment equals U
and so on...
到目前为止,我已经创建了下面的代码:
for i in range(len(df.columns)):
curent_column=list(df.columns)[i]
col_df_array = df[curent_column].unique()
for j in range(col_df_array.size):
new_col_name = str(list(df.columns)[i])+"_"+col_df_array[j]
for index,row in df.iterrows():
if(row[curent_column] == col_df_array[j]):
df[new_col_name] = row[curent_column]
问题是,即使我成功地创建了列名,也无法获得正确的列值。
例如,“性别”列应如下所示:
data2 = {'Gender': ['M', 'F', 'M', 'F','M', 'F','M', 'F','M', 'F','M', 'F'],
'Gender_M': ['M', 'na', 'M', 'na','M', 'na','M', 'na','M', 'na','M', 'na'],
'Gender_F': ['na', 'F', 'na', 'F','na', 'F','na', 'F','na', 'F','na', 'F']
}
df2 = pd.DataFrame(data2)
就是说,na
可以是任何值,比如空白、点或NAN。
3条答案
按热度按时间k4ymrczo1#
你要找的是
pd.get_dummies
。dldeef672#
如果您试图以类似df2示例的格式获取数据,我相信这就是您要寻找的。
输出:
旧答案
输出:
ds97pgxw3#
如果您可以在新列中使用0和1,那么使用
get_dummies
(如@richardec所建议的)应该是最直接的。但是,如果希望在每个新列中使用特定的字母,另一种方法是循环遍历当前列和每个列中的特定类别,然后使用apply根据这些信息创建一个新列。
结果: