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

时间:2016-11-28 09:38:54

标签: python pandas dataframe merge mean

我有像这样的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   

我想取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        

2 个答案:

答案 0 :(得分: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

正则表达式为Series创建groupby的另一个解决方案是extract

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

答案 1 :(得分:2)

试试这个

import pandas as pd

df = pd.read_csv('pd_sample1.csv')

df['a'] = (df['a1']+df['a2'])/2
df['b'] = (df['b1']+df['b2'])/2

df = df.drop(['a1','a2','b1','b2'],axis=1)

print df