我可以将列名列表传递给get_dummies()用作所有可能答案的列标签吗?

时间:2019-04-19 09:56:52

标签: python pandas

(编辑:我刚刚意识到我想提出一个无法回答的问题,但不确定如何删除此问题...请忽略或建议如何删除。我认为我需要考虑一个不同的问题解决这个问题的方法。)

****** -------------------------------- *****

我有一个名为user_answers的数据框,该数据框是使用get_dummies()形成的。看起来像这样

  

索引,Q1_1,Q1_2,Q1_4,Q1_5,mas_Y,fhae_Y

     

1,1,0,0,0,0,0

     

2,0,0,1,0,1,0

     

3,0,1,0,0,1,1

     

4,1,0,0,0,1,0

     

5,0,0,0,1,1,0

     

6,0,0,1,0,1,1

     

7,0,1,0,0,1,1

我需要与名为DF_answers的类似DataFrame进行比较。那个DataFrame看起来像这样

  

索引,Q1_1,Q1_2,Q1_3,Q1_4,Q1_5,mas_Y,fhae_Y

     

1,1,0,0,0,0,1,0

     

2,1,0,0,0,0,1,0

     

3,0,1,0,0,0,1,1

     

4,0,0,1,0,0,1,0

     

5,0,0,0,0,1,1,0

     

6,1,0,0,0,0,1,1

     

7,0,0,0,1,0,1,1

我遇到的问题是,当我使用“ get_dummies”时,假设用户没有在原始调查表的7个问题中选择任何一个作为问题的答案,则不会在user_answers数据框中为Q1_3创建一列。我需要尝试使user_answers的输出看起来像这样。因此,即使用户未对7个问题中的任何一个回答Q1_3,get_dummies仍将按照下面的说明输出Q1_3列,其中填充了零。

  

索引,Q1_1,Q1_2, Q1_3 ,Q1_4,Q1_5,mas_Y,fhae_Y

     

1,1,0,0,0, 0 ,0,0

     

2,1,0,0,0, 0 ,1,0

     

3,0,1,0,0, 0 ,1,1

     

4,1,0,0,0, 0 ,1,0

     

5,0,0,0,1, 0 ,1,0

     

6,1,0,0,0, 0 ,1,1

     

7,1,0,0,0, 0 ,1,1

我认为我考虑问题的可能性太大了。我读到您可以将列名称列表传递到get_dummies()

1 个答案:

答案 0 :(得分:1)

很抱歉延迟,

在下面找到我的尝试

据我了解,以下内容适用

  1. 您有一个数据框,其中仅包含用户填写的问题。
  2. 您需要将其合并到一个框架中,该框架对于每个进一步的分析都存在每个问题?

如果这是真的,那是我的愚蠢尝试:

cols = ['ID','Q1_1','Q1_2','Q1_4','Q1_5','mas_Y','fhae_Y']
data = []
for x in enumerate(cols):
    data.append(np.random.randint(0,150,size=150))
df = pd.DataFrame(dict(zip(cols,data)))
print(df.head())
    ID  Q1_1    Q1_2    Q1_4    Q1_5    mas_Y   fhae_Y
0   7   76  41  46  57  75  139
1   11  118 65  38  17  116 75
2   111 104 109 110 32  53  106
3   131 14  92  128 14  22  65
4   83  72  148 99  103 133 144

## Create a dummy frame
cols_b = ['ID'] 
x = 0
for i in range(1,101):
    cols_b.append('Q1_' + str(x+i))

data_b = []
for x in enumerate(cols_b):
    data_b.append(np.nan)

df2 = pd.DataFrame(dict(zip(cols_b,data_b)),index=[0])
final_cols = list(df2.columns)
final_cols.append('fhae_Y')
final_cols.append('mas_Y')
df = pd.merge(df,df2,how='left')
print(df[final_cols].fillna(0).head(5))
    ID  Q1_1    Q1_2    Q1_3    Q1_4    Q1_5    Q1_6    Q1_7    Q1_8    Q1_9    ... Q1_93   Q1_94   Q1_95   Q1_96   Q1_97   Q1_98   Q1_99   Q1_100  fhae_Y  mas_Y
0   7   76  41  0.0 46  57  0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 139 75
1   11  118 65  0.0 38  17  0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 75  116
2   111 104 109 0.0 110 32  0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 106 53
3   131 14  92  0.0 128 14  0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 65  22
4   83  72  148 0.0 99  103 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 144