Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

592
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda