python pandas dataframe

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