Complicado (para mí) remodelación de ancho a largo en Pandas

Los individuos (indexados de 0 a 5) eligen entre dos ubicaciones: A y B. Mis datos tienen un formato amplio que contiene características que varían según el individuo (ind_var) y características que varían solo según la ubicación (location_var).

Por ejemplo, tengo:

In [281]:

df_reshape_test = pd.DataFrame( {'location' : ['A', 'A', 'A', 'B', 'B', 'B'], 'dist_to_A' : [0, 0, 0, 50, 50, 50], 'dist_to_B' : [50, 50, 50, 0, 0, 0], 'location_var': [10, 10, 10, 14, 14, 14], 'ind_var': [3, 8, 10, 1, 3, 4]})

df_reshape_test

Out[281]:
    dist_to_A   dist_to_B   ind_var location location_var
0    0            50             3   A       10
1    0            50             8   A       10
2    0            50            10   A       10
3    50           0              1   B       14
4    50           0              3   B       14
5    50           0              4   B       14

La variable 'ubicación' es la elegida por el individuo. dist_to_A es la distancia a la ubicación A desde la ubicación elegida por el individuo (lo mismo con dist_to_B)

Me gustaría que mis datos tuvieran este formulario:

    choice  dist_S  ind_var location    location_var
0    1        0       3         A           10
0    0       50       3         B           14
1    1        0       8         A           10
1    0       50       8         B           14
2    1        0      10         A           10
2    0       50      10         B           14
3    0       50       1         A           10
3    1        0       1         B           14
4    0       50       3         A           10
4    1        0       3         B           14
5    0       50       4         A           10
5    1        0       4         B           14

donde la opción == 1 indica que el individuo ha elegido esa ubicación y dist_S es la distancia desde la ubicación elegida.

Leí sobre el.apilar Método, pero no pudo averiguar cómo aplicarlo para este caso. ¡Gracias por tu tiempo!

NOTA: esto es solo un ejemplo simple. Los conjuntos de datos que busco tienen diferentes números de ubicación y número de individuos por ubicación, por lo que estoy buscando una solución flexible si es posible

Respuestas a la pregunta(3)

Su respuesta a la pregunta