Ich bin ziemlich neu in Python und dieser Gemeinschaft, also bitte verzeih mir meine amateurhaften Versuche, meine tiefe Verwirrung auf etwas zu erklären, das höchstwahrscheinlich sehr offensichtlich ist. Wie auch immer ..Using any() und all() auf MultiIndex DataFrame beim Schneiden über .xs: seltsames Verhalten oder nur ich?
Ich habe einen Datenrahmen namens "Daten". Es ist MultiIndexed mit 2 Ebenen bestehend aus: "Datum" und "Fürze".
Es gibt eine einzelne Spalte namens: "integrated_daily_difference".
Sie übernehmen können „Fürze“ ist vom Typ: ‚pandas.core.index.Index‘ und wurde über erstellt: farts = data.index.levels[1]
lässt sich nun vor, würde ich an einer beliebigen ein Stück Sicht auf meine Datenrahmen nehmen möchten Indexwert in furzt: dh Fürze [1]
Me:
data.xs(farts[1], level = 1)
Computer:
integrated_daily_difference
date
2015-05-21 00:00:00+00:00 0.000000
2015-05-22 00:00:00+00:00 0.000000
2015-05-26 00:00:00+00:00 -0.024497
2015-05-27 00:00:00+00:00 -0.051144
2015-05-28 00:00:00+00:00 -0.079841
2015-05-29 00:00:00+00:00 -0.106666
2015-06-01 00:00:00+00:00 -0.131245
2015-06-02 00:00:00+00:00 -0.157428
2015-06-03 00:00:00+00:00 -0.184057
2015-06-04 00:00:00+00:00 -0.209755
2015-06-05 00:00:00+00:00 -0.234588
2015-06-08 00:00:00+00:00 -0.262365
2015-06-09 00:00:00+00:00 -0.291890
2015-06-10 00:00:00+00:00 -0.320943
2015-06-11 00:00:00+00:00 -0.352627
2015-06-12 00:00:00+00:00 -0.381425
2015-06-15 00:00:00+00:00 -0.404055
Me
:
data.xs(farts[1], level = 1) < 0
Computer:
integrated_daily_difference
date
2015-05-21 00:00:00+00:00 False
2015-05-22 00:00:00+00:00 False
2015-05-26 00:00:00+00:00 True
2015-05-27 00:00:00+00:00 True
2015-05-28 00:00:00+00:00 True
2015-05-29 00:00:00+00:00 True
2015-06-01 00:00:00+00:00 True
2015-06-02 00:00:00+00:00 True
2015-06-03 00:00:00+00:00 True
2015-06-04 00:00:00+00:00 True
2015-06-05 00:00:00+00:00 True
2015-06-08 00:00:00+00:00 True
2015-06-09 00:00:00+00:00 True
2015-06-10 00:00:00+00:00 True
2015-06-11 00:00:00+00:00 True
2015-06-12 00:00:00+00:00 True
2015-06-15 00:00:00+00:00 True
Ich nehme an, dies zurückgibt, ob ein Wert für jeden Ort innerhalb meiner geschnitten Datenrahmen existiert, so ist das Ergebnis wahr ist?
Me:
data.xs(farts[1], level = 1).any()
Computer:
integrated_daily_difference True
dtype: bool
OK, das alle Art Sinn macht. Jetzt für die weird stuff ..
Me:
data.xs(farts[1], level = 1).any() < 0
Computer:
integrated_daily_difference False
dtype: bool
Huh ....?
Me:
data.xs(farts[1], level = 1).any(axis = 0) < 0
Computer:
integrated_daily_difference False
dtype: bool
Me:
data.xs(farts[1], level = 1).any(axis = 1) < 0
Computer:
date
2015-05-21 00:00:00+00:00 False
2015-05-22 00:00:00+00:00 False
2015-05-26 00:00:00+00:00 False
2015-05-27 00:00:00+00:00 False
2015-05-28 00:00:00+00:00 False
2015-05-29 00:00:00+00:00 False
2015-06-01 00:00:00+00:00 False
2015-06-02 00:00:00+00:00 False
2015-06-03 00:00:00+00:00 False
2015-06-04 00:00:00+00:00 False
2015-06-05 00:00:00+00:00 False
2015-06-08 00:00:00+00:00 False
2015-06-09 00:00:00+00:00 False
2015-06-10 00:00:00+00:00 False
2015-06-11 00:00:00+00:00 False
2015-06-12 00:00:00+00:00 False
2015-06-15 00:00:00+00:00 False
Me:
data.xs(farts[1], level = 1).any(axis = 1) <= 0
Computer:
date
2015-05-21 00:00:00+00:00 True
2015-05-22 00:00:00+00:00 True
2015-05-26 00:00:00+00:00 False
2015-05-27 00:00:00+00:00 False
2015-05-28 00:00:00+00:00 False
2015-05-29 00:00:00+00:00 False
2015-06-01 00:00:00+00:00 False
2015-06-02 00:00:00+00:00 False
2015-06-03 00:00:00+00:00 False
2015-06-04 00:00:00+00:00 False
2015-06-05 00:00:00+00:00 False
2015-06-08 00:00:00+00:00 False
2015-06-09 00:00:00+00:00 False
2015-06-10 00:00:00+00:00 False
2015-06-11 00:00:00+00:00 False
2015-06-12 00:00:00+00:00 False
2015-06-15 00:00:00+00:00 False
Me:
data.xs(farts[1], level = 1).any(axis = 0) <= 0
Computer:
integrated_daily_difference False
dtype: bool
Dann begann mein Computer lachen maniacally bei mir und meinem Kopf explodiert ...
Aber im Ernst, was ist hier los? Mein Ziel war es, nur zu versuchen, zu überprüfen, ob alle oder irgendwelche Werte in meinem Einzelspalten-Datenrahmen eine Bedingung erfüllen und ein boolesches Wahr oder Falsch zurückgeben. Ich benutze keine() korrekt, also suche ich Hilfe.
Jede Eingabe wird geschätzt. Vielen Dank im Voraus!
Dies ist sehr hilfreich. Vielen Dank! Ich ging tatsächlich ein wenig tiefer und versuchte folgendes: mylist = [1,2,3,4,0, -1] print 'test 1:', alle (meine liste)> -1 print 'test 2:', alles (i> -1 für i in meiner Liste) Test 1 gedruckt True und Test 2 gedruckt False. Ich nehme an, dies ist aufgrund von True (1) und False (0) beide für den ersten Fall> -1, und wenn es in einem Generator ausgewertet wird verhält es sich anders .. –
Lassen Sie Ihren ersten Versuch zu brechen, 'all (meine Liste) 'wieder gibt es keine Bedingung, aber da die Liste eine 0 enthält, gibt es False zurück, das numerisch 0 ist, das heißt, wenn Sie es mit"> -1 "testen, gibt es True zurück. – hashcode55
und in der zweiten testen Sie auf einer Liste von booleans! i> -1 wird False für -1 zurückgeben, was zu False führt, try> = -1 und Sie erhalten True! Es ist nur das Basis-Konzept, das Sie im Auge behalten müssen ..... "True zurückgeben, wenn ein Element des iterable wahr ist." - für alle und "Return True, wenn alle Elemente des iterable sind wahr" - für alle – hashcode55