我想知道如何合併多個列並再次拆分它們。在熊貓數據框中合併和拆分列
輸入數據
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
有沒有簡單的方法來完成這項工作?
我想知道如何合併多個列並再次拆分它們。在熊貓數據框中合併和拆分列
輸入數據
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
有沒有簡單的方法來完成這項工作?
開始與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
未在你喜歡的方式放鬆,你需要或者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
'堆()MUL(2).unstack()' –
@ PaulH注意到OP要求按列方式堆疊的值......這意味着將行索引放到列上,因此首先是「unpack」。然後處理任何事情(我選擇'mul(2)'),然後'unstack(0)'來取代堆疊。我在'mul(2)'中選擇了一個不好的例子來證明細微差別 – piRSquared
ahh,在單級列索引的情況下,'stack'和'unstack'做同樣的事情(我覺得奇怪) –
設置
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
拆分它回到第三列:?
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
功能平坦也似乎是合併多列的好主意。謝謝您的回答。 – z991
我認爲沒有必要放棄索引。 –
@PaulH試圖匹配OP的預期輸出,但你是正確的,這是不需要的。 –
@ScottBoston,df3的輸出結果與此處顯示的不一樣。數據可能需要先轉置。 – Allen