在pandas数据框中合并和拆分列

时间:2017-06-06 02:47:48

标签: python pandas

我想知道如何合并多个列,然后重新拆分它们。

输入数据

A B C
1 3 5
2 4 6

将A,B,C合并到一列X

X
1
2
3
4
5
6

用X处理某些东西,然后再将X分成A,B,C。 A,B,C的行数相同(2)。

A B C
1 3 5
2 4 6

这项工作有简单的方法吗?

3 个答案:

答案 0 :(得分:3)

从df开始:

   A  B  C
0  1  3  5
1  2  4  6

接下来,获取一列中的所有值:

df2 = df.unstack().reset_index(drop=True).rename('X').to_frame()

print(df2)

   X
0  1
1  2
2  3
3  4
4  5
5  6

然后,转换回原始形状:

df3  = pd.DataFrame(df2.values.reshape(2,-1, order='F'), columns=list('ABC'))
print(df3)

   A  B  C
0  1  3  5
1  2  4  6

答案 1 :(得分:2)

设置

df=pd.DataFrame({'A': {0: 1, 1: 2}, 'B': {0: 3, 1: 4}, 'C': {0: 5, 1: 6}})

df
Out[684]: 
   A  B  C
0  1  3  5
1  2  4  6

<强>解决方案

将df合并为1列:

df2 = pd.DataFrame(df.values.flatten('F'),columns=['X'])
Out[686]: 
   X
0  1
1  2
2  3
3  4
4  5
5  6

将其拆分为3列:

pd.DataFrame(df2.values.reshape(-1,3,order='F'),columns=['A','B','C'])
Out[701]: 
   A  B  C
0  1  3  5
1  2  4  6

答案 2 :(得分:1)

以您希望的方式放松,您需要unstackravel order='F'

选项1

def proc1(df):
    v = df.values
    s = v.ravel('F')
    s = s * 2
    return pd.DataFrame(s.reshape(v.shape, order='F'), df.index, df.columns)

proc1(df)

   A  B   C
0  2  6  10
1  4  8  12

选项2

def proc2(df):
    return df.unstack().mul(2).unstack(0)


proc2(df)

   A  B   C
0  2  6  10
1  4  8  12