使用python pandas数据帧时,如何对列进行分组?

时间:2017-11-01 04:37:26

标签: python pandas dataframe

我的输入excel(xlsx)文件格式如下:

mz     n     n     n     n     g_1     g_1     g_2     g_2     g_2     
1      2     3     4     5     6       7       8       8       8       
1      2     3     4     5     6       7       8       8       8       
1      2     3     4     5     6       7       8       8       8       
1      2     3     4     5     6       7       8       8       8       

当我使用pd.read_excel读取文件时,它会以某种方式为每列添加数字,如:

mz     n     n.1     n.2     n.3     g_1     g_1.1     g_2     g_2.1     g_2.2
1      2     3       4       5       6       7         8       8         8
1      2     3       4       5       6       7         8       8         8      
1      2     3       4       5       6       7         8       8         8   

所以我无法使用groupby对那些包含'n','g_1'等的人进行分组。有没有办法让groupby在特定组上工作?我尝试使用相同的类型合并列标题,但无济于事。

编辑:我选择的答案解决了这个问题。但是,我还有一个问题。当我从答案中添加代码时,生成的分组数据框的列全部乱序。有没有办法保存列名的顺序?谢谢!

1 个答案:

答案 0 :(得分:1)

IIUC,使用split然后在第一部分之前进行分组。':

df.groupby(df.columns.str.split('.').str[0], axis=1).sum()

输出:

   g_1  g_2  mz   n
0   13   24   1  14
1   13   24   1  14
2   13   24   1  14

df是:

   mz  n  n.1  n.2  n.3  g_1  g_1.1  g_2  g_2.1  g_2.2
0   1  2    3    4    5    6      7    8      8      8
1   1  2    3    4    5    6      7    8      8      8
2   1  2    3    4    5    6      7    8      8      8