2016-12-13 5 views
2

多くの優れた例を追加するために、私は自分が望む形式にデータを作り直そうとしています。パンダの機能を再構築する

私は現在の列を挟ん日内の期間の観察と顧客、購入カテゴリ、日付ごとにインデックスを付けたデータを、持っている:私のデータように、私は購入カテゴリ別に集計したい Two categories, date and times

、および再構築顧客は列全体に表示されますが、日付と時刻で索引付けされます。

enter image description here

これを達成するためのsimplest wayは何ですか?テキスト形式で

は、元のデータは次のようになります。

<table><tbody><tr><th>Customer</th><th>Purchase Category</th><th>date</th><th>00:30</th><th>01:00</th><th>01:30</th></tr><tr><td>1</td><td>A</td><td>01/07/2012</td><td>1.25</td><td>1.25</td><td>1.25</td></tr><tr><td>1</td><td>B</td><td>01/07/2012</td><td>0.855</td><td>0.786</td><td>0.604</td></tr><tr><td>1</td><td>C</td><td>01/07/2012</td><td>0</td><td>0</td><td>0</td></tr><tr><td>1</td><td>A</td><td>02/07/2012</td><td>1.25</td><td>1.25</td><td>1.125</td></tr><tr><td>1</td><td>B</td><td>02/07/2012</td><td>0.309</td><td>0.082</td><td>0.059</td></tr><tr><td>1</td><td>C</td><td>02/07/2012</td><td>0</td><td>0</td><td>0</td></tr><tr><td>2</td><td>A</td><td>01/07/2012</td><td>0</td><td>0</td><td>0</td></tr><tr><td>2</td><td>B</td><td>01/07/2012</td><td>0.167</td><td>0.108</td><td>0.119</td></tr><tr><td>2</td><td>C</td><td>01/07/2012</td><td>0</td><td>0</td><td>0</td></tr><tr><td>2</td><td>A</td><td>02/07/2012</td><td>0</td><td>0</td><td>0</td></tr><tr><td>2</td><td>B</td><td>02/07/2012</td><td>0.11</td><td>0.109</td><td>0.123</td></tr></tbody></table>

+0

は、あなたのデータフレームのreproductibleバージョンを与えることができますか? – MMF

+0

@MMFそれが役に立ったらコピー可能なテキストテーブルを追加しました。 – arthuritus

答えて

2

私はあなたがstackunstackによりリシェイプとsumを集約してgroupbyが必要だと思います。最終poplevel_1dateに追加しto_datetimeを変換:

print (df) 
    Customer Purchase Category  date 00:30 01:00 01:30 
0   1     A 01/07/2012 1.250 1.250 1.250 
1   1     B 01/07/2012 0.855 0.786 0.604 
2   1     C 01/07/2012 0.000 0.000 0.000 
3   1     A 02/07/2012 1.250 1.250 1.125 
4   1     B 02/07/2012 0.309 0.082 0.059 
5   1     C 02/07/2012 0.000 0.000 0.000 
6   2     A 01/07/2012 0.000 0.000 0.000 
7   2     B 01/07/2012 0.167 0.108 0.119 
8   2     C 01/07/2012 0.000 0.000 0.000 
9   2     A 02/07/2012 0.000 0.000 0.000 
10   2     B 02/07/2012 0.110 0.109 0.123 

df1 = df.groupby(['Customer','date']).sum().stack().unstack(0).reset_index() 
df1.date = pd.to_datetime(df1.date + df1.pop('level_1'), format='%d/%m/%Y%H:%M') 
print (df1) 
Customer    date  1  2 
0  2012-07-01 00:30:00 2.105 0.167 
1  2012-07-01 01:00:00 2.036 0.108 
2  2012-07-01 01:30:00 1.854 0.119 
3  2012-07-02 00:30:00 1.559 0.110 
4  2012-07-02 01:00:00 1.332 0.109 
5  2012-07-02 01:30:00 1.184 0.123 
関連する問題