添加缺失列

添加缺失列

问题描述:

此问题是Create multiple columns from a single column的延续。 现在假设我们有2个数据框,训练和测试,我怎么能够为每个列添加缺失的列? 问候,添加缺失列

编辑: 列车数据帧:

  Products 
1   A;B 
2   A 
3   B;A;C 

。成为:

  Has_A  Has_B  Has_C 
1   1   1   0 
2   1   0   0 
3   1   1   1 

测试数据帧:

  Products 
1   A;B 
2   A 
3   D;A;B 

。成为:

  Has_A  Has_B  Has_D 
1   1   1   0 
2   1   0   0 
3   1   1   1 

列车具有“Has_C”并且测试具有“Has_D”加上每个。

我想补充的Has_C列的测试和Has_D火车填补他们以0

+0

做两遍...... – TheChetan

+0

有些值不存在于两组 – datascana

+1

你能解释更多吗?一些示例数据是最好的。 – jezrael

您可以使用DataFrame.assign()方法:

all_cols = train.columns.union(test.columns) 

train = train.assign(**{col:0 for col in all_cols.difference(train.columns).tolist()}) 
test = test.assign(**{col:0 for col in all_cols.difference(test.columns).tolist()}) 

演示:

In [310]: train.assign(**{col:0 for col in all_cols.difference(train.columns).tolist()}) 
Out[310]: 
    Has_A Has_B Has_C Has_D 
1  1  1  0  0 
2  1  0  0  0 
3  1  1  1  0 

In [311]: test.assign(**{col:0 for col in all_cols.difference(test.columns).tolist()}) 
Out[311]: 
    Has_A Has_B Has_D Has_C 
1  1  1  0  0 
2  1  0  0  0 
3  1  1  1  0 

我认为你需要reindex_axisreindexunioncolumns

train = train['Products'].str.get_dummies(';').add_prefix('Has_') 
test = test['Products'].str.get_dummies(';').add_prefix('Has_') 

cols = train.columns.union(test.columns) 
print (cols) 
Index(['Has_A', 'Has_B', 'Has_C', 'Has_D'], dtype='object') 

train = train.reindex_axis(cols, axis=1, fill_value=0) 
print (train) 
    Has_A Has_B Has_C Has_D 
1  1  1  0  0 
2  1  0  0  0 
3  1  1  1  0 

test = test.reindex(columns=cols, fill_value=0) 
print (test) 
    Has_A Has_B Has_C Has_D 
1  1  1  0  0 
2  1  0  0  0 
3  1  1  0  1 
+0

使用'.reindex_axis(...)'是个好主意 - 我喜欢它 – MaxU

//取列不在train_df

COLS =列表(集(train_df.columns.values) - 集(test_df.columns.values))

//创建虚设数据帧和与train_df加入

pd.DataFrame([[0山口在COLS],列= COLS)。加入(test_df,如何= '外部')。fillna(0)

执行相同的过程train_df

希望它有帮助:)