如何将列与 pandas 中的虚拟变量组合(一个输出)?
How to combine columns with dummy variables in pandas (one output)?
给定以下数据框和虚拟变量。如何组合或折叠两个或多个列以创建一个新列,如果一个或多个列具有 1,则该列具有 1,如果 NONE 个列具有 1,则具有 0。
data = {'cat_1': [1, 0, 1, 1, 0], 'cat_2':[1, 0, 0, 1, 1], 'cat_3':[0, 0, 1, 1, 1], 'cat_4':[1, 1, 1, 0, 0]}
df=pd.DataFrame(data, index=['s1', 's2', 's3', 's4', 's5'])
df
cat_1 cat_2 cat_3 cat_4
s1 1 1 0 1
s2 0 0 0 1
s3 1 0 1 1
s4 1 1 1 0
s5 0 1 1 0
我希望输出看起来像这样:
data2 = {'cat_1_cat_2 combined': [1, 0, 1, 1, 1], 'cat_3_cat_4 combined':[1, 1, 1, 1, 1]}
new_df=pd.DataFrame(data2, index=['s1', 's2', 's3', 's4', 's5'])
print(new_df)
cat_1_cat_2 combined cat_3_cat_4 combined
s1 1 1
s2 0 1
s3 1 1
s4 1 1
s5 1 1
执行此操作的一种方法如下:
将0:s替换为nan
,例如cat_2
和cat_3
df['cat_2'] = np.where(df['cat_2'],1,np.nan)
df['cat_4'] = np.where(df['cat_4'],1,np.nan)
给出:
cat_1 cat_2 cat_3 cat_4
s1 1 1.0 0 1.0
s2 0 NaN 0 1.0
s3 1 NaN 1 1.0
s4 1 1.0 1 NaN
s5 0 1.0 1 NaN
然后合并它们:
df["combined 1 and 2 "] = df.pop("cat_2").fillna(df.pop("cat_1")).astype(int)
df["combined 3 and 4 "] = df.pop("cat_4").fillna(df.pop("cat_3")).astype(int)
哪个 return 你期望的 df:
combined 1 and 2 combined 3 and 4
s1 1 1
s2 0 1
s3 1 1
s4 1 1
s5 1 1
或者,
df['combined 1 and 2'] = (df.cat_1 | df.cat_2).astype(int)
df['combined 3 and 4'] = (df.cat_3 | df.cat_4).astype(int)
df = df.drop(['cat_1','cat_2','cat_3','cat_4'], axis =1)
给定以下数据框和虚拟变量。如何组合或折叠两个或多个列以创建一个新列,如果一个或多个列具有 1,则该列具有 1,如果 NONE 个列具有 1,则具有 0。
data = {'cat_1': [1, 0, 1, 1, 0], 'cat_2':[1, 0, 0, 1, 1], 'cat_3':[0, 0, 1, 1, 1], 'cat_4':[1, 1, 1, 0, 0]}
df=pd.DataFrame(data, index=['s1', 's2', 's3', 's4', 's5'])
df
cat_1 cat_2 cat_3 cat_4
s1 1 1 0 1
s2 0 0 0 1
s3 1 0 1 1
s4 1 1 1 0
s5 0 1 1 0
我希望输出看起来像这样:
data2 = {'cat_1_cat_2 combined': [1, 0, 1, 1, 1], 'cat_3_cat_4 combined':[1, 1, 1, 1, 1]}
new_df=pd.DataFrame(data2, index=['s1', 's2', 's3', 's4', 's5'])
print(new_df)
cat_1_cat_2 combined cat_3_cat_4 combined
s1 1 1
s2 0 1
s3 1 1
s4 1 1
s5 1 1
执行此操作的一种方法如下:
将0:s替换为nan
,例如cat_2
和cat_3
df['cat_2'] = np.where(df['cat_2'],1,np.nan)
df['cat_4'] = np.where(df['cat_4'],1,np.nan)
给出:
cat_1 cat_2 cat_3 cat_4
s1 1 1.0 0 1.0
s2 0 NaN 0 1.0
s3 1 NaN 1 1.0
s4 1 1.0 1 NaN
s5 0 1.0 1 NaN
然后合并它们:
df["combined 1 and 2 "] = df.pop("cat_2").fillna(df.pop("cat_1")).astype(int)
df["combined 3 and 4 "] = df.pop("cat_4").fillna(df.pop("cat_3")).astype(int)
哪个 return 你期望的 df:
combined 1 and 2 combined 3 and 4
s1 1 1
s2 0 1
s3 1 1
s4 1 1
s5 1 1
或者,
df['combined 1 and 2'] = (df.cat_1 | df.cat_2).astype(int)
df['combined 3 and 4'] = (df.cat_3 | df.cat_4).astype(int)
df = df.drop(['cat_1','cat_2','cat_3','cat_4'], axis =1)