2016-11-28 6 views
-3

У меня есть 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. TjE результат должен быть следующим:

 a   b    
0 1.5  3.5    
1 3.5  4.5   
2 6.5  5.5   
3 7   4   
+2

Я думаю, вам следует немного разъяснить ваш вопрос примерами того, что вы пробовали до сих пор, и какой результат вы ожидаете. См. [Как задать вопрос.] (Http://stackoverflow.com/help/how-to-ask) – Marusyk

ответ

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 
+0

Если мой или другой ответ был полезен, не забудьте [accept] (http: //meta.stackexchange .com/a/5235/295067). Благодарю. – jezrael

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