Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

232
Views
Convierta una serie de valores emparejados en una matriz (0,1) usando el marco de datos de pandas

Tengo 2 Series de números: A = (24,25,26,27,28,29) y B = (105,106,107,108,109). Y un DataFrame con dos columnas A y B como:

 import numpy as np import pandas as pd A = pd.Series(np.array([24, 25, 26, 27, 28, 29])) B = pd.Series(np.array([105, 106, 107, 108, 109])) AB_dataframe = pd.DataFrame({ 'A': [25, 25, 25, 26, 26, 27, 27, 28, 29], 'B': [106, 108, 109, 108, 109, 106, 108, 108, 107] })

AB_dataframe :

 AB 0 25 106 1 25 108 2 25 109 3 26 108 4 26 109 5 27 106 6 27 108 7 28 108 8 29 107

Quiero reescribirlos en un DataFrame como este:

 105 106 107 108 109 24 0 0 0 0 0 25 0 1 0 1 1 26 0 0 0 1 1 27 0 1 0 1 0 28 0 0 0 1 0 29 0 0 1 0 0

¿Cómo hago esto? He probado muchos tipos diferentes de bucles y todavía no lo he conseguido.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede usar crosstab para obtener los datos ficticios, luego reindex a indexar para obtener el índice/columnas correctos:

 out = (pd.crosstab(AB_dataframe['A'], AB_dataframe['B']) .reindex(index=A, columns=B, fill_value=0) )

Producción:

 105 106 107 108 109 24 0 0 0 0 0 25 0 1 0 1 1 26 0 0 0 1 1 27 0 1 0 1 0 28 0 0 0 1 0 29 0 0 1 0 0
over 4 years ago · Santiago Trujillo Report

0

Otra opción, con value_counts:

 (AB_dataframe.value_counts() .unstack(fill_value=0) .reindex(columns = B, index = A, fill_value = 0) ) 105 106 107 108 109 24 0 0 0 0 0 25 0 1 0 1 1 26 0 0 0 1 1 27 0 1 0 1 0 28 0 0 0 1 0 29 0 0 1 0 0
over 4 years ago · Santiago Trujillo Report

0

Puedes hacer lo siguiente:

 A = (24, 25, 26, 27, 28, 29) B = (105, 106, 107, 108, 109) df = pd.DataFrame( { "A": [25, 25, 25, 26, 26, 27, 27, 28, 29], "B": [106, 108, 109, 108, 109, 106, 108, 108, 107], } ) out = pd.DataFrame( np.array( [1 if (x, y) in set(zip(df["A"], df["B"])) else 0 for x in A for y in B] ).reshape((len(A), len(B))), index=A, columns=B, ) ## Or equivalently, using dtype uint8 to cast booleans to 0 and 1s: out = pd.DataFrame( np.array( [(x, y) in set(zip(df["A"], df["B"])) for x in A for y in B], dtype="uint8" ).reshape((len(A), len(B))), index=A, columns=B, )
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!