组合多个列并替换它们的平均值

-3 python merge mean dataframe pandas

我有像这样的pandas datframe.

    a1      a2      b1      b2    
0    1       2       2       5    
1    3       4       5       4           
2    6       7       8       3         
3    7       7       7       1   
Run Code Online (Sandbox Code Playgroud)

我想取a1和a2,b1和b2的意思,并用a和b替换它.结果应如下:

      a          b             
0    1.5        3.5              
1    3.5        4.5        
2    6.5        5.5        
3    7          4        
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

您可以使用groupby列名的第一个字符并聚合mean:

print (df.columns.str[0])
Index(['a', 'a', 'b', 'b'], dtype='object')

df = df.groupby([df.columns.str[0]], axis=1).mean()
print (df)
     a    b
0  1.5  3.5
1  3.5  4.5
2  6.5  5.5
3  7.0  4.0
Run Code Online (Sandbox Code Playgroud)

创造另一种解决方案Seriesgroupbyextract通过正则表达式:

print (df.columns.str.extract("([a-zA-Z])", expand=False))
Index(['a', 'a', 'b', 'b'], dtype='object')

df = df.groupby([df.columns.str.extract("([a-zA-Z])", expand=False)], axis=1).mean()
print (df)
     a    b
0  1.5  3.5
1  3.5  4.5
2  6.5  5.5
3  7.0  4.0
Run Code Online (Sandbox Code Playgroud)