Selección aleatoria en el dataframe de pandas

Estoy tratando de resolver esta pregunta más complicada . Aquí hay un problema más pequeño:

Dado df

ab 1 2 5 0 5 9 3 6 1 8 

¿Cómo puedo crear una columna C que sea una selección aleatoria entre los dos elementos de df [‘a’] y df [‘b’] de la misma fila?

Entonces, dado este df ficticio, el operador aleatorio elegiría del par (1, 2) para la fila # 1, de (5, 0) para la fila # 2 … etc.

Gracias

 import random n = 2 # target row number random.sample(df.iloc[n, :2], 1) # Pick one number from this row. 

Para todo el dataframe:

 >>> df.loc[:, ['a', 'b']].apply(random.sample, args=(1,), axis=1) 0 [1] 1 [5] 2 [9] 3 [3] 4 [8] dtype: object 

Limpiarlo para extraer los valores individuales:

 >>> pd.Series([i[0] for i in df.loc[:, ['a', 'b']].apply(random.sample, args=(1,), axis=1)], index=df.index) 0 1 1 5 2 9 3 3 4 8 dtype: int64 

O aprovechando que la columna ‘a’ está indexada en cero (Falso) y la columna ‘b’ está indexada en 1 (Verdadero):

 >>> [df.iat[i, j] for i, j in enumerate(1 * (np.random.rand(len(df)) < .5))] [1, 5, 5, 6, 8] 

No es necesario utilizar un módulo random separado:

 s = """ab 1 2 5 0 5 9 3 6 1 8 """ df = pd.read_table(StringIO(s),sep='\s+',engine='python') df.apply(lambda x: x.sample(n=1).iloc[0],axis=1) #output: 0 1 1 5 2 9 3 6 4 1 dtype: int64