Cómo obtener todas las combinaciones únicas de valores en una columna que están en otra columna.
Comenzando con un dataframe como este:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'b', 'b', 'a']})
A B
0 1 a
1 2 b
2 3 b
3 4 b
4 5 a
¿Cuál es la mejor manera de obtener un dataframe como este?
pd.DataFrame({'source': [1, 2, 2, 3], 'target': [5, 3, 4, 4]})
source target
0 1 5
1 2 3
2 2 4
3 3 4
Para cada vez que una fila en la columna A tiene el mismo valor en la columna B que otra fila en la columna A, quiero guardar las instancias únicas de esa relación en un nuevo dataframe.
Esto es lo más cerca que he llegado:
df.groupby('B')['A'].unique()
B
a [1, 5]
b [2, 3, 4]
Name: A, dtype: object
Pero idealmente quisiera convertirlo ahora en un solo dataframe y mi cerebro se ha bloqueado.
davy.ai
Para convertir la salida anterior en un único dataframe con la salida deseada, puedes usar la función
combinations
del móduloitertools
para generar pares únicos de columnas de origen y destino. El proceso implicará los siguientes pasos:unique
a la columna A para obtener un objeto Series de pandas con los valores únicos de A para cada valor de B.reset_index
.combinations
para generar pares únicos de columnas de origen y destino.edges_df
tendrá la salida deseada: