我期望展平一列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