更新:バージョン0.20.0から、pandas cut/qcutは日付フィールドを処理します。詳細については、What's Newを参照してください。パンダの日付フィールドのcut/qcutに相当するものは何ですか?
pd.cutとpd.qcut今サポートdatetime64とtimedelta64 dtypes(GH14714、GH14798)
オリジナル質問:パンダカットとqcut機能がための連続したデータを 'バケット化' のための素晴らしいですピボットテーブルなどで使用していますが、ミックスで日時軸を取得する簡単な方法はわかりません。パンダはすべての時間関連のものでとても素晴らしいので、挫折!ここで
は簡単な例です:価格や数量のグループによってビンへ
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
、私はそれらをバケットにカット/ qcutを使用することができます。
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
しかし、私はどんな簡単に見ることができません私の 'recd'または 'ship'日付フィールドで同じことをする方法。例えば、recdとshipの毎月のバケットで分けられた同様のカウントテーブルを生成します。 resample()にはすべての期間が入っている機械がありますが、ここではどのように適用するかわかりません。 'date cut'のバケット(またはレベル)はpandas.PeriodIndexと等しくなり、それからdf ['recd']の各値にその期間にラベルを付けるとします。
だから、私が探している出力の種類はのようになります。より一般的に
ship recv count
2011-01 2011-01 1
2011-02 3
... ...
2011-02 2011-01 2
2011-02 6
... ... ...
を、私はミックスして出力で連続またはカテゴリ変数と一致することができるようにしたいと思います。そう、多分私は、ステータス、価格バケット、船とRECDバケットでカウントを集計する、DFはまた、赤/黄/緑の値を持つ「ステータス」列が含まれて想像:ボーナス質問として
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
... ... ... ...
、何ですgroupby()の結果を 'count'という単一の出力列だけに変更する最も簡単な方法は?
これは一般的な解決策のようではありません。 2つの異なる日付、または日付と非日付(カットまたはカテゴリ変数を使用)でグループ化する場合私は探している出力の構造で質問を更新します。 – patricksurry