2016-10-17 2 views
4

код, чтобы сделать тестовые данныепанды транспонирование числовой столбец группой

import pandas as pd 

dftest = pd.DataFrame({'Amt': {0: 60, 1: 35.0, 2: 30.0, 3: np.nan, 4: 25}, 
         'Year': {0: 2012.0, 1: 2012.0, 2: 2012.0, 3: 2013.0, 4: 2013.0}, 
         'Name': {0: 'A', 1: 'A', 2: 'C', 3: 'A', 4: 'B'}}) 

дает

Amt  Name Year 
0 60  A 2012.0 
1 35.0  A 2012.0 
2 30.0  C 2012.0 
3 NaN  A 2013.0 
4 25  B 2013.0 

столбец Amt имеет максимум 2 значения, соответствующие группе ['Name', 'Year']. Я хотел бы повернуть/транспозиции таким образом, что выход из формы

 Name Year Amt1 Amt2 
0   A 2012 35 60 
2   C 2012 30 NaN 
3   A 2013 NaN NaN 
4   B 2013 25 NaN 

Я попытался играть с шарниром, разборки, pivot_table

что я действительно хочу сделать, это убедиться, есть два значения Amt за ['Name', 'Year'] (NA «ы ОК), которые можно достичь путем укладки требуемого выходного

+0

Я бы предположил, что вы хотите, чтобы Amt1 составлял 60, а Amt2 - 35 для первой строки. Вы хотите, чтобы они отсортировались в первую очередь? – DSM

+0

Я бы предпочел, чтобы они сортировались по возрастанию, что было тривиально, я думаю, вы можете пренебречь им сейчас – muon

ответ

3

использование groupby и apply

f = lambda x: x.sort_values(ascending=True).reset_index(drop=True) 
dftest.groupby(['Name', 'Year']).Amt.apply(f).unstack() 

enter image description here

Смежные вопросы