2013-09-23 7 views
2

Я использую библиотеку pandas для создания сводных таблиц в файлах csv.Можем ли мы иметь многомерные значения в pandas pivot-table?

Обычный формат кода pivot_table - это что-то вроде нижнего кода.

tips=read_csv('tips.csv') 
`table=pd.pivot_table(tips, values='tip_pct', rows=['time', 'sex'], cols='smoker')` 

Мне было интересно, можем ли мы добавить более одного измерения в поле значений, например, ниже?

List=read_csv('list.csv') 
table=pd.pivot_table(List, values=['Applications','Acquisitions'], rows='Sub-Product',cols='Application Date', aggfunc='sum') 

Я попытался код, указанный выше, но форматирование было неправильно, поэтому я надеялся, что есть другой способ, чтобы получить его?

в конечном счете, я хочу, чтобы получить этот

http://i.stack.imgur.com/cifML.png

Все, что я могу получить сейчас

http://i.stack.imgur.com/4mbzK.png

Это часть моего исходного файла list.csv я пытаюсь конвертировать в сводную таблицу.

Application Date Sub-Product Applications Acquisitions 
11/1/12     GP    1 1 
11/1/12     GP    1 1 
11/2/12     GP    1 1 
11/2/12     GP    1 1 
11/3/12     GP    1 1 
11/3/12     GPF    1 1 
11/4/12     GPF    1 1 
11/4/12     GPF    2 2 
11/5/12     GPF    1 1 
11/5/12     GPF    1 1 
11/6/12     GPF    1 1 





    This is what im trying to achieve for my pivot table. 

    1. Cols : Application Date 
    2. Row labels: Sub-Product 
    3. Values: Application, Acquisitions 

      Row Labels  11/1/2012 11/2/2012 11/3/2012 
      **GP**   
      Applications 190  207   65 
      Acquisitions 164  168   54 
      **GPF**   
      Applications 1391  1430   1269 
      Acquisitions 1124  1142   992 
      **Innovative Gateway**   
      Applications 2  1  
      Acquisitions 2  1 

Но то, что я получаю

Sub-Product ('Applications', '1/1/13')('Applications', '1/10/13') 
    GP        48 134 
    GPF        600 1099  
    Innovative Gateway    1 2 

это мой код:

> list=pd.read_csv("List.csv") 
> df=DataFrame(list) 
> table=pd.pivot_table(df,values=['Applications','Acquisitions'], rows='Sub-Product',cols='Application Date',aggfunc=np.sum) 
>table.to_csv('file.csv') 

Так что вопрос теперь, что я не в состоянии иметь больше чем одно значение для значений поле, и дата, похоже, перепуталась. Пожалуйста помоги!

Благодаря


Дата выпуска ценных бумаг может быть решена с

xl2["Application Date"] = pd.to_datetime(xl2["Application Date"], format="%m/%d/%y") 

сейчас моя единственная проблема заключается в том, что значения поля косяк принимать более одного значения и интересно, если кто имеет какие-либо идея о том, как использовать функции stack или reshape.

+0

Что вы имеете в виду форматирование было не так? –

+0

Привет Энди, не могли бы вы взглянуть на ссылки, которыми я поделился? – jxn

+0

Похоже, вы можете складывать/переформатировать в правильную форму. Скопируйте и вставьте фактический текст, а не изображение ... это, похоже, не соответствует исходным аргументам: S –

ответ

2

Да, это добавить их в качестве верхнего уровня столбца:

In [1]: df = pd.DataFrame(np.random.randint(0, 3, (5, 5)), columns=list('abcde')) 

In [2]: df 
Out[2]: 
    a b c d e 
0 2 1 1 2 0 
1 0 1 2 0 2 
2 1 1 1 0 2 
3 0 0 1 1 0 
4 2 0 2 0 1 

In [3]: df.pivot_table(values=['a', 'b'], rows='c', cols='d') 
Out[3]: 
    a   b 
d 0 1 2 0 1 2 
c 
1 1 0 2 1.0 0 1 
2 1 NaN NaN 0.5 NaN NaN 
Смежные вопросы