如何在熊猫中将行转换为列?

时间:2018-12-02 12:04:17

标签: python pandas

我想将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 :(得分:2)

使用set_index进行地板分割,使用3unstack取模并展平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

答案 1 :(得分:1)

我正在使用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