Zugriffsindex in pandas.Series.apply
Können sagen, ich habe einen MultiIndex Serie s
:
>>> s
values
a b
1 2 0.1
3 6 0.3
4 4 0.7
und ich möchte eine Funktion, die verwendet den index der Zeile:
def f(x):
# conditions or computations using the indexes
if x.index[0] and ...:
other = sum(x.index) + ...
return something
Wie kann ich das machen s.apply(f)
für eine solche Funktion? Was ist der empfohlene Weg, um diese Art von Aktivitäten? Ich erwarte, dass die Beschaffung einer neuen Serie mit dem Werte, die sich aus dieser Funktion, angewendet auf jede Zeile und die gleiche MultiIndex.
InformationsquelleAutor der Frage elyase | 2013-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass
apply
hat Zugriff auf den index; es behandelt jede Zeile als ein numpy-Objekt, nicht eine Serie, wie man sehen kann:Um dieses Problem zu umgehen, fördern die Indizes auf Spalten anwenden Sie Ihre Funktion, und erstellen Sie eine Serie mit den original-index.
Andere Ansätze verwenden könnte
s.get_level_values
das wird oft ein wenig hässlich meiner Meinung nach, oders.iterrows()
wird wahrscheinlich langsamer sein-vielleicht, je nach genau das, wasf
tut.InformationsquelleAutor der Antwort Dan Allan
Machen es zu einem Rahmen, die Skalare zurückgeben, wenn Sie möchten (das Ergebnis ist eine Serie)
Setup
Druck-Funktion
Da können Sie die Rückgabe auch hier nichts, einfach nur wieder die Skalare (Zugriff auf den index über die
name
Attribut)InformationsquelleAutor der Antwort Jeff
Konvertieren
DataFrame
und anwenden entlang der Zeile. Sie können Zugriff auf den index alsx.name
.x
ist auch einSeries
jetzt mit 1 WertInformationsquelleAutor der Antwort nehz
Du kann finden, es schneller zu bedienen
where
eher alsapply
hier:Außerdem können Sie mit numpy-Stil Logik/Funktionen, die zu jedem der Teile:
Ich empfehlen, dass das testen für Geschwindigkeit (Effizienz gegen angewendet wird, hängt von der Funktion). Obwohl, ich finde, dass
apply
s sind besser lesbar...InformationsquelleAutor der Antwort Andy Hayden
Können Sie auf die ganze Zeile als argument innerhalb der Funktion, wenn Sie verwenden, DataFrame.apply() anstelle von Serie.anwenden().
InformationsquelleAutor der Antwort Vladimir Leontiev