Ich habe den folgenden Datenrahmen (tatsächliche Länge des Datenrahmen ist viel größer) zu berechnen:schnellster Weg, um einen Datenrahmen zu mischen P-Wert in Pandas
spend_df:
var spend
1 120
2 200
1 111
1 143
1 230
2 180
2 190
2 94
2 100
1 278
hier'var' Spalt sagen der Gruppe der Testreihe gehört, muss ich die df 1000 mal mischen, um jede reihe zufällig zu verschiedenen seiten von test zufällig groupby 'var' zuzuordnen und die differenz für jede iteration zu berechnen. Am Ende berechnet, wie viel Mal, wenn die Differenz zwischen den Gruppen Summe größer war, dass die tatsächliche Differenz:
i den folgenden Ansatz:
def simulate(df):
simul_df = df.copy()
shuffled_var = simul_df.sample(frac=1)
shuffled_var.index = simul_df.index # replace shuffled series' index with the real one
simul_df['var'] = shuffled_var
simul_grouped = simul_df.groupby('var').sum()['spend']
simul_difference = simul_grouped.iloc[1] - simul_grouped.iloc[0]
return simul_difference
simulate(spend_df)
und das ist, wie ich berechnen, wie viele Male simuliert Unterschied größer war, dass die tatsächlichen Unterschied:
simulations = np.array([simulate(spend_df) for i in range(1000)])
(simulations > real_difference).mean()
hier real_difference ist der Unterschied zwischen Summen von zwei Gruppen verbringen (Gruppe von 'var'):
grouped=df.groupby('var').sum().reset_index()
real_diff=grouped.iloc[1] - grouped.iloc[0]
in diesem Fall ist es: 882-764 = 118
wenn ich den Datenrahmen mische ich brauche, wie ich oben, dann müssen Sie den Unterschied für neue Gruppen zu berechnen, wie oft diese simulierten Unterschiede herauszufinden, wo mehr als real_diff
Diese Lösung scheint ein bisschen hacky zu mir gibt es keine schnellere oder besser organisierte Art und Weise zu dieser Simulation Aufgabe für die Berechnung von P-Wert? ohne auf statistische Methoden einzugehen.
Danke, ich frage mich, wie es wirklichen Unterschied berechnet. was ich mit readl difference meine, ist groupby ('var'). sum(), so dass wir einige Ausgaben für zwei Gruppen var1 und var2 haben, die dann subtrahiert werden. Ist deine Funktion dasselbe? – sanaz
Warum redest du deine Frage nicht mit einer Berechnung dessen, was 'real_difference' für deine Probe' spend_df' ist? – piRSquared
Bearbeitet die Frage, hoffentlich ist es jetzt klarer – sanaz