Как превратить конвертировать строки в столбцы в пандах? - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу преобразовать каждые три строки DataFrame в столбцы.

Input:

import pandas as pd  
df = pd.DataFrame({'a': [1,2,3,11,12,13],'b':['a','b','c','aa','bb','cc']})
print(df)

Output:

    a   b
0   1   a
1   2   b
2   3   c
3  11  aa
4  12  bb
5  13  cc

Expected:

   a1  a2  a3  b1  b2  b3
0   1   2   3   a   b   c
1  11  12  13  aa  bb  cc

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Я добавляю другой подход с помощью group -> apply.

df сначала группируется по df.index//3, а затем функция munge применяется к каждой группе.

def munge(group):
    g = group.T.stack()
    g.index = ['{}{}'.format(c, i+1) for i, (c, _) in enumerate(g.index)]
    return g

result = df.groupby(df.index//3).apply(munge)

Выход:

>>> df.groupby(df.index//3).apply(munge)
   a1  a2  a3  b4  b5  b6
0   1   2   3   a   b   c
1  11  12  13  aa  bb  cc
0 голосов
/ 02 декабря 2018

Используйте set_index делением по полу и по модулю 3 с unstack и выравниванием MultiIndex:

a = np.arange(len(df))
#if default index
#a = df.index
df1 = df.set_index([a // 3, a % 3]).unstack()
#python 3.6+ solution
df1.columns = [f'{i}{j + 1}' for i,j in df1.columns]
#python bellow 3.6
#df1.columns = ['{}{}'.format(i,j+1) for i,j in df1.columns]
print (df1)
   a1  a2  a3  b1  b2  b3
0   1   2   3   a   b   c
1  11  12  13  aa  bb  cc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...