我想知道如何合并多个列,然后重新拆分它们。
输入数据
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
这项工作有简单的方法吗?
答案 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)
以您希望的方式放松,您需要unstack
或ravel
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