unstack column python pandas

python - column - La devolución de múltiples valores de pandas se aplica a un DataFrame



pandas unstack (1)

Devolver una serie, en lugar de una tupla, debería producir un nuevo DataFrame de múltiples columnas. Por ejemplo,

return pandas.Series({''pvalue'': pvalue, ''mean_ratio'': mean_ratio})

Estoy usando un DataFrame para hacer una prueba de t fila según este ejemplo:

import numpy import pandas df = pandas.DataFrame(numpy.log2(numpy.randn(1000, 4), columns=["a", "b", "c", "d"]) df = df.dropna()

Ahora, suponiendo que tengo "a" y "b" como un grupo, y "c" y "d" en el otro, realizaré el t-test en hilera. Esto es bastante trivial con pandas, usando apply con axis = 1. Sin embargo, puedo devolver un DataFrame de la misma forma si mi función no se agrega, o una serie si se agrega.

Normalmente, solo mostraría el valor p (por lo tanto, agregación) pero me gustaría generar un valor adicional basado en otros cálculos (en otras palabras, devolver dos valores). Por supuesto, puedo hacer dos corridas, agregar los valores p primero, y luego hacer el otro trabajo, pero me preguntaba si existe una forma más eficiente de hacerlo ya que los datos son razonablemente grandes.

Como ejemplo del cálculo, una función hipotética sería:

from scipy.stats import ttest_ind def t_test_and_mean(series, first, second): first_group = series[first] second_group = series[second] _, pvalue = ttest_ind(first_group, second_group) mean_ratio = second_group.mean() / first_group.mean() return (pvalue, mean_ratio)

Luego invocado con

df.apply(t_test_and_mean, first=["a", "b"], second=["c", "d"], axis=1)

Por supuesto, en este caso, devuelve una sola serie con las dos tuplas como valor.

En cambio, el resultado esperado es un DataFrame con dos columnas, una para el primer resultado y otra para el segundo. ¿Es esto posible o tengo que hacer dos carreras para los dos cálculos, luego combinarlos?