Die Rückgabe mehrerer Werte von Pandas gilt für einen DataFrame

Ich benutze einen PandasDataFrame So führen Sie einen zeilenweisen T-Test gemäß diesem Beispiel durch:

import numpy
import pandas

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

df = df.dropna()

Angenommen, ich habe "a" und "b" als eine Gruppe und "c" und "d" an der anderen, dann führe ich den T-Test zeilenweise durch. Dies ist bei Pandas ziemlich trivialapply mit Achse = 1. Ich kann jedoch entweder einen DataFrame mit derselben Form zurückgeben, wenn meine Funktion nicht aggregiert, oder eine Serie, wenn sie aggregiert.

Normalerweise würde ich nur den p-Wert ausgeben (also die Aggregation), aber ich möchte einen zusätzlichen Wert basierend auf anderen Berechnungen generieren (mit anderen Worten, zwei Werte zurückgeben). Natürlich kann ich zwei Läufe durchführen, wobei zuerst die p-Werte aggregiert werden und dann die andere Arbeit ausgeführt wird. Ich habe mich jedoch gefragt, ob dies effizienter ist, da die Daten relativ groß sind.

Als Beispiel für die Berechnung wäre eine hypotethische Funktion:

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)

Dann mit aufgerufen

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

In diesem Fall wird natürlich eine einzelne Serie mit den beiden Tupeln als Wert zurückgegeben.

Stattdessen wäre jede erwartete Ausgabe ein DataFrame mit zwei Spalten, eine für das erste Ergebnis und eine für das zweite. Ist dies möglich oder muss ich zwei Durchläufe für die beiden Berechnungen durchführen und sie dann zusammenführen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage