Wenn Aufruf einer Funktion mit groupby
+ apply
, die ich von einem DataFrame
zu einem Series
groupby Objekt gehen wollen, eine Funktion, die jeder Gruppe anwenden, die eine Series
als Eingabe und gibt eine Series
als Ausgabe, und dann die Ausgabe von der groupby
+ apply
Anruf als ein Feld in der DataFrame
zuweisen. Das Standardverhalten besteht darin, dass die Ausgabe von groupby
+ apply
durch die Gruppierungsfelder indiziert wird, wodurch verhindert wird, dass ich sie sauber dem DataFrame
zuordnet. Ich würde bevorzugen, dass die Funktion, die ich mit anrufe, eine Series
als Eingabe nehmen und eine Series
als Ausgabe zurückgeben; Ich denke, es ist ein bisschen sauberer als DataFrame
zu DataFrame
. (Dies ist nicht der beste Weg, in diesem Beispiel auf das Ergebnis bekommen, die reale Anwendung recht unterschiedlich ist.)beibehalten Dataframe-Index bei der Serie erzeugen groupby gelten mit
import pandas as pd
df = pd.DataFrame({
'A': [999, 999, 111, 111],
'B': [1, 2, 3, 4],
'C': [1, 3, 1, 3]
})
def less_than_two(series):
# Intended for series of length 1 in this case
# But not intended for many-to-one generally
return series.iloc[0] < 2
output = df.groupby(['A', 'B'])['C'].apply(less_than_two)
ich den Index will auf output
die gleichen wie df
sein, sonst kann ich nicht zuordnen zu df
(sauber):
df['Less_Than_Two'] = output
So etwas wie output.index = df.index
zu hässlich scheint, und das group_keys
Argument scheint nicht zu funktionieren:
output = df.groupby(['A', 'B'], group_keys = False)['C'].apply(less_than_two)
df['Less_Than_Two'] = output
Sieht so aus, als würde "transform" den gleichen "dtype" wie das Eingabefeld behalten. Ich mag es, dass 'transform' das ursprüngliche' Index' behält, obwohl ich nicht unbedingt aussehe, um hier zu senden, was ich denke, ist egal, weil die Ergebnisse von Länge 1 sind. Diese Antwort ist die beste im Geist, obwohl in der Das vollständige Problem 'transform' konvertiert' boolean' in 'datetime', welches nicht in' boolean' zurückkonvertiert werden kann. Von R kommend, habe ich das Gefühl, dass der Index ein zweischneidiges Schwert ist, und "dtypes" sind irgendwie schwierig, aber ich mag viele andere Dinge. –