添加缺失列
问题描述:
此问题是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
答
您可以使用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_axis
或reindex
与union
的columns
:
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
希望它有帮助:)
做两遍...... – TheChetan
有些值不存在于两组 – datascana
你能解释更多吗?一些示例数据是最好的。 – jezrael