python - Fusionar dos marcos de datos en uno nuevo con elementos únicos marcados con 1 o 0
pandas dataframe (4)
Tengo varios marcos de datos.
Marco de datos # 1
Feature Coeff
a 0.5
b 0.3
c 0.35
d 0.2
Marco de datos # 2
Feature Coeff
a 0.7
b 0.2
y 0.75
x 0.1
Quiero fusionar este marco de datos y obtener el siguiente:
Feature | DF1 | DF2
a 1 1
b 1 1
c 1 0
d 1 0
y 0 1
x 0 1
Sé que puedo hacer una
merge
outer
pero no sé cómo avanzar desde allí para obtener el marco de datos final que presenté anteriormente.
¿Algunas ideas?
Fusioné dos marcos de datos usando
pd.merge
y usé la comprensión de lista para asignar valores.
df = df1.merge(df2, on=''Feature'', how=''outer'')
df[''DF1''] = [1 if x > 0 else 0 for x in df[''Coeff_x'']]
df[''DF2''] = [1 if x > 0 else 0 for x in df[''Coeff_y'']]
df.drop([''Coeff_x'', ''Coeff_y''], axis=1, inplace=True)
Feature DF1 DF2
0 a 1 1
1 b 1 1
2 c 1 0
3 d 1 0
4 y 0 1
5 x 0 1
He visto otras respuestas (específicas de pandas), y me gustaría preguntar cuáles son las ventajas de los métodos como
series.str.get_dummies()
si puede lograr lo mismo con los métodos / funciones incorporados.
¿Es mucho más rápido?
Verdaderamente curioso ya que soy un novato yo mismo.
(perdón, necesito más puntos de reputación para dejar comentarios directamente bajo otras respuestas)
La misma idea como user3483203 pero con
crosstab
referencias
crosstab
u = pd.concat([df1, df2], axis=0, keys=[''DF1'', ''DF2''])
pd.crosstab(u.Feature, u.index.get_level_values(0))
Puede usar
merge
con
series.str.get_dummies()
juntos para lograr esto:
m=df1[[''Feature'']].merge(df2[[''Feature'']],how=''outer'',indicator=True)
d={''both'':''DF1,DF2'',''left_only'':''DF1'',''right_only'':''DF2''}
m=m.assign(_merge=m._merge.map(d))
m[[''Feature'']].join(m._merge.str.get_dummies('',''))
Feature DF1 DF2
0 a 1 1
1 b 1 1
2 c 1 0
3 d 1 0
4 y 0 1
5 x 0 1
Utilizando
concat
+
get_dummies
u = pd.concat([df1, df2], axis=0, keys=[''DF1'', ''DF2''])
pd.get_dummies(u.Feature).sum(level=0).T
DF1 DF2
a 1 1
b 1 1
c 1 0
d 1 0
x 0 1
y 0 1