2016-12-13 1 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

당신이 당신의 dataframe의 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