Update: beginnend mit Version 0,20.0, pandas cut/qcut behandelt Datumsfelder. Weitere Informationen finden Sie unter What's New.Was ist äquivalent zu cut/qcut für Pandas Datumsfelder?
pd.cut und pd.qcut jetzt datetime64 und timedelta64 dtypes (GH14714, GH14798)
Original Frage unterstützen: Pandas Schnitt und qcut Funktionen sind für 'bucketing' kontinuierliche Daten für Verwenden Sie in Pivot-Tabellen und so weiter, aber ich sehe keine einfache Möglichkeit, um Datetime-Achsen in der Mischung zu erhalten. Frustrierend seit Pandas ist so toll in all den zeitbezogenen Sachen!
Hier ist ein einfaches Beispiel:
def randomDates(size, start=134e7, end=137e7):
return np.array(np.random.randint(start, end, size), dtype='datetime64[s]')
df = pd.DataFrame({'ship' : randomDates(10), 'recd' : randomDates(10),
'qty' : np.random.randint(0,10,10), 'price' : 100*np.random.random(10)})
df
price qty recd ship
0 14.723510 3 2012-11-30 19:32:27 2013-03-08 23:10:12
1 53.535143 2 2012-07-25 14:26:45 2012-10-01 11:06:39
2 85.278743 7 2012-12-07 22:24:20 2013-02-26 10:23:20
3 35.940935 8 2013-04-18 13:49:43 2013-03-29 21:19:26
4 54.218896 8 2013-01-03 09:00:15 2012-08-08 12:50:41
5 61.404931 9 2013-02-10 19:36:54 2013-02-23 13:14:42
6 28.917693 1 2012-12-13 02:56:40 2012-09-08 21:14:45
7 88.440408 8 2013-04-04 22:54:55 2012-07-31 18:11:35
8 77.329931 7 2012-11-23 00:49:26 2012-12-09 19:27:40
9 46.540859 5 2013-03-13 11:37:59 2013-03-17 20:09:09
Bin von Gruppen von Preis oder Menge, kann ich sie schneiden/qcut Eimer verwenden:
df.groupby([pd.cut(df['qty'], bins=[0,1,5,10]), pd.qcut(df['price'],q=3)]).count()
price qty recd ship
qty price
(0, 1] [14.724, 46.541] 1 1 1 1
(1, 5] [14.724, 46.541] 2 2 2 2
(46.541, 61.405] 1 1 1 1
(5, 10] [14.724, 46.541] 1 1 1 1
(46.541, 61.405] 2 2 2 2
(61.405, 88.44] 3 3 3 3
Aber ich jeden einfach nicht sehen kann Möglichkeit, das Gleiche mit meinen 'Recd' oder 'Ship' Datumsfeldern zu tun. Zum Beispiel, erzeugen Sie eine ähnliche Tabelle von Zählungen, die durch (sagen wir) monatliche Buckets von recd und ship unterteilt sind. Es sieht so aus, als ob resample() alle Maschinen in Perioden einteilen kann, aber ich kann nicht herausfinden, wie man es hier anwendet. Die Buckets (oder Level) im 'date cut' wären äquivalent zu einem pandas.PeriodIndex, und dann möchte ich jeden Wert von df ['recd'] mit der Periode versehen, in die er fällt?
So ist die Art der Ausgabe, die ich suche wäre so etwas wie:
ship recv count
2011-01 2011-01 1
2011-02 3
... ...
2011-02 2011-01 2
2011-02 6
... ... ...
Generell würde Ich mag Lage sein, kontinuierlich oder kategorische Variablen in der Ausgabe zu mischen und anzupassen. Stellen Sie sich vor df auch eine Spalte ‚Status‘ mit rot/gelb/grün-Werte enthält, dann vielleicht möchte ich zählt zusammenzufassen nach Status, Preis Eimer, Schiffs- und Erh Eimer, so:
ship recv price status count
2011-01 2011-01 [0-10) green 1
red 4
[10-20) yellow 2
... ... ...
2011-02 [0-10) yellow 3
... ... ... ...
Als Bonus Frage, was ist Die einfachste Möglichkeit, das obige groupby() - Ergebnis so zu ändern, dass nur eine einzige Ausgabespalte namens "count" enthalten ist.
Dies scheint nicht wie eine allgemeine Lösung, z.B. wenn ich an zwei verschiedenen Daten oder einem Datum und einem Nicht-Datum gruppieren möchte (über Schnitt- oder Kategorievariable). Ich werde die Frage mit der Struktur der Ausgabe, die ich suche, aktualisieren. – patricksurry