我期望展平一列DataFrame
,其中有多列(下面爲['a', 'b', 'c']
)列,每列n列(下圖:n = 2)。還有一些不需要被壓平的停滯數據(下面:['Misc','Year'])。下面是一個例子DataFrame
:Python展平多列所有n長度的數據框
df = pd.DataFrame({
'Misc': ['A', 'R', 'B'],
'Year': [1991, 1992, 1993],
'a1': [10, 20, 30],
'a2': [40, 50, 60],
'b1': ['h', 'i', 'j'],
'b2': ['k', 'l', 'm'],
'c1': [4.1, 4.2, 4.3],
'c2': [4.4, 4.5, 4.6] })
產生如下:
In [244]: df
Out[244]:
Misc Year a1 a2 b1 b2 c1 c2
0 A 1991 10 40 h k 4.1 4.4
1 R 1992 20 50 i l 4.2 4.5
2 B 1993 30 60 j m 4.3 4.6
我所要的輸出是:
In [4]: df1
Out[4]:
Misc Year a b c
0 A 1991 10 h 4.1
1 A 1991 40 k 4.4
2 R 1992 20 i 4.2
3 R 1992 50 l 4.5
4 B 1993 30 j 4.3
5 B 1993 60 m 4.6
所以[ai, bi, ci]
移動到一個單一的row
同時保持[雜項,年]。我正在處理成千上萬的行數據集,因此性能是一個大問題。我目前正在循環每行來分隔它們,但希望有一個更好的扁平化python函數。我已經看到了熊貓的「融化」功能,但它似乎只適用於有單一羣體的情況。
最終,我想創建一個幫助函數,它可以接受任意數量的「組」列,「停滯」列和「n」值。
我目前使用的是熊貓,但也對其他解決方案開放。謝謝您的幫助! :)
謝謝安迪!如果我想保留'第i'列索引怎麼辦?是否可以在concat函數中創建一個全新的列,比如'N_index',並將其賦值爲str(i)的值? – kolze100
@ kolze100 IIUC我會(懶洋洋地)用'.sort_index()',然後'.reset_index()'做這個。從某種意義上說,你想要的索引不是真的來自任何地方,我不認爲它可以在concat中完成。 –
嗯,我實際上打算在它上面執行一些邏輯。我想用「年」欄和「ith」號碼來獲得年份 - 月份組合。例如:i = 2年= 1992年將被置於'日期'欄作爲'Feb-1992'。有什麼建議麼? – kolze100