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

580
Views
Pandas, por cada valor único en una columna, obtenga valores únicos en otra columna

Tengo un marco de datos donde cada fila contiene varios metadatos relacionados con un solo comentario de Reddit (por ejemplo, autor, subreddit, texto de comentario).

Quiero hacer lo siguiente: para cada autor, quiero obtener una lista de todos los subreddits en los que tienen comentarios y transformar estos datos en un marco de datos de pandas donde cada fila corresponde a un autor y una lista de todos los subreddits únicos. comentan en.

Actualmente estoy intentando alguna combinación de lo siguiente, pero no puedo bajarlo:

Intento 1:

 group = df['subreddit'].groupby(df['author']).unique() list(group)

Intento 2:

 from collections import defaultdict subreddit_dict = defaultdict(list) for index, row in df.iterrows(): author = row['author'] subreddit = row['subreddit'] subreddit_dict[author].append(subreddit) for key, value in subreddit_dict.items(): subreddit_dict[key] = set(value) subreddit_df = pd.DataFrame.from_dict(subreddit_dict, orient = 'index')
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Aquí hay dos estrategias para hacerlo. Sin duda, hay otras formas.

Suponiendo que su marco de datos se vea así (obviamente con más columnas):

 df = pd.DataFrame({'author':['a', 'a', 'b'], 'subreddit':['sr1', 'sr2', 'sr2']}) >>> df author subreddit 0 a sr1 1 a sr2 2 b sr2 ...

SOLUCIÓN 1: agrupar por

Más sencillo que la solución 2 y similar a su primer intento:

 group = df.groupby('author') df2 = group.apply(lambda x: x['subreddit'].unique()) # Alternatively, same thing as a one liner: # df2 = df.groupby('author').apply(lambda x: x['subreddit'].unique())

Resultado:

 >>> df2 author a [sr1, sr2] b [sr2]

El autor es el índice, y la única columna es la lista de todos los subreddits en los que están activos (así es como interpreté cómo querías tu salida, de acuerdo con tu descripción).

Si quisiera los subreddits cada uno en una columna separada, que podría ser más útil, dependiendo de lo que quiera hacer con él, podría hacer esto después:

 df2 = df2.apply(pd.Series)

Resultado:

 >>> df2 0 1 author a sr1 sr2 b sr2 NaN

Solución 2: iterar a través del marco de datos

puede crear un nuevo marco de datos con todos los autores únicos:

 df2 = pd.DataFrame({'author':df.author.unique()})

Y luego obtenga la lista de todos los subreddits únicos en los que están activos, asignándolos a una nueva columna:

 df2['subreddits'] = [list(set(df['subreddit'].loc[df['author'] == x['author']])) for _, x in df2.iterrows()]

Esto te da esto:

 >>> df2 author subreddits 0 a [sr2, sr1] 1 b [sr2]
over 4 years ago · Santiago Trujillo Report

0

Mediante el uso de datos de muestra de sacul

 df['subreddit'].groupby(df['author']).unique().apply(pd.Series) Out[370]: 0 1 author a sr1 sr2 b sr2 NaN
over 4 years ago · Santiago Trujillo Report

0

Usando la función groupby.agg() "agggeate":

*

DataFrameGroupBy.agg(arg, *args, **kwargs): agregado usando una o más operaciones sobre el eje especificado. Función que se utilizará para agregar los datos. Si es una función, debe funcionar cuando se pasa un DataFrame o cuando se pasa a DataFrame.apply

 df = pd.DataFrame({'numbers': [1, 2, 3, 6, 9], 'colors': ['red', 'white', 'blue', 'red', 'white']}, columns=['numbers', 'colors'])

ingrese la descripción de la imagen aquí


 df.groupby('colors', as_index=True).agg({'numbers' : {"unique" : lambda x: set(x), "nunique" : lambda x : len(set(x))}})

ingrese la descripción de la imagen aquí

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!