2016-11-28 10 views
-3

私はこのようなpandasデータフレームを持っています。複数の列を組み合わせてそれらの平均を置き換える

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

あなたはこれまでに試したことの例と期待している出力の例を少しはっきりさせるべきだと思います。 – Marusyk

答えて

5

あなたは、列名と集約meanの最初の文字でgroupbyを使用することができます。

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 

groupbyためSeriesを作成するための別の解決策は、正規表現によって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

私の回答または他の回答が役に立った場合は、[承諾](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 
関連する問題