Я хочу добавить строки данных в виде столбцов - PullRequest
2 голосов
/ 25 марта 2019

У меня есть несколько небольших фреймов данных, таких как:

name   x   y  z
A      1   2  3
A      1   23  4
A      3    5   6
B       0    2  3

И я хочу добавить все буквы "А", чтобы я получил этот фрейм данных

name    x    y   z   x2   y2 z2    x3   y3   z3
A         1   2  3    1    23 4    3    5     6
B         0  2  3    NaN-------------------> NaN

Любая помощь будетприветствуется, извините, если вышеприведенные таблицы не расположены правильно

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Используйте pivot_table с некоторыми другими функциями:

df['idx'] = df.groupby('name').cumcount()+1
df = df.pivot_table(index='name', columns='idx', values=['x', 'y', 'z'], aggfunc='first')
df = df.sort_index(axis=1, level=1)
df.columns = [f'{x}_{y}' for x,y in df.columns]
df = df.reset_index()

А теперь:

print(df)

Воспроизводится:

  name  x_1  y_1  z_1  x_2   y_2  z_2  x_3  y_3  z_3
0    A  1.0  2.0  3.0  1.0  23.0  4.0  3.0  5.0  6.0
1    B  0.0  2.0  3.0  NaN   NaN  NaN  NaN  NaN  NaN
2 голосов
/ 25 марта 2019

Больше похоже на проблему pivot после создания ключа с помощью cumcount --- Я использую unstack здесь

df['Newkey']=df.groupby('name').cumcount()+1
yourdf=df.set_index(['name','Newkey']).unstack().sort_index(level=1,axis=1)
yourdf.columns=yourdf.columns.map('{0[0]}{0[1]}'.format)
yourdf
Out[20]: 
       x1   y1   z1   x2    y2   z2   x3   y3   z3
name                                              
A     1.0  2.0  3.0  1.0  23.0  4.0  3.0  5.0  6.0
B     0.0  2.0  3.0  NaN   NaN  NaN  NaN  NaN  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...