2017-01-26 13 views
1

я есть DF, как это:Необычное изменение формы панды DataFrame

df = pd.DataFrame({'x': ['a', 'a', 'b', 'b', 'b', 'c'], 
        'y': [1, 2, 3, 4, 5, 6], 
       }) 

, который выглядит следующим образом:

x y 
0 a 1 
1 a 2 
2 b 3 
3 b 4 
4 b 5 
5 c 6 

мне нужно, чтобы изменить его так, чтобы сохранить столбец «х» уникальна:

x y_1 y_2 y_3 
0 a 1 2 NaN 
1 b 3 4 5 
2 c 6 NaN NaN 

Таким образом, максимальное N столбцов 'Y_n' должен быть равен

max(df.groupby('x').count().values) 

и столбец x должен содержать уникальные значения.

На данный момент я не получаю, как получить столбцы y_N.

Спасибо.

ответ

4

Вы можете использовать pandas.crosstab с cumcount столбца в качестве параметра columns:

(pd.crosstab(df.x, df.groupby('x').cumcount() + 1, df.y, 
      aggfunc = lambda x: x.iloc[0]) 
    .rename(columns="y_{}".format).reset_index()) 

enter image description here

+0

Спасибо! Блестящее решение. –

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

  • Нет связанных вопросов^_^