2016-08-03 15 views
1

私はパンダが初めてです。私はいくつか持っていますdfs。列0のデータはIDであり、列1-10のデータは確率です。列1-10の列方向平均をdfsに渡って使用したいと考えています。行は同じ順序ではありません。特定の列からパンダのデータフレームを平均化する

IDに各dfを並べ替えてから、df関数を追加/除算するよりも良い方法はありますか?どんな助けもありがたい。

ご意見ありがとうございます。明確にするために、私は2つのdfs 要素wiseを平均する必要があります。私。 (ただ、各DFの1行を示す):

Df1:  id132456, 1, 2, 3, 4 
Df2:  id132456, 2, 2, 3, 2 
Averaged: id132456, 1.5, 2, 3, 3 
+0

パンダは、(などを分割、追加)多くの操作のためのインデックスを使用しています。インデックスとしてIDを設定すると、ソートする必要はありません。 – ayhan

答えて

1

それは必要concatmean次のようになります。

import pandas as pd 

df1 = pd.DataFrame({0:[14254,25445,34555], 
        1:[1,2,3], 
        2:[1,1,1], 
        3:[1,2,0]}) 

print (df1) 
     0 1 2 3 
0 14254 1 1 1 
1 25445 2 1 2 
2 34555 3 1 0 

df2 = pd.DataFrame({0:[14254,25445,34555], 
        2:[1,0,0], 
        1:[1,0,1], 
        3:[1,2,0]}) 

print (df2) 
     0 1 2 3 
0 14254 1 1 1 
1 25445 0 0 2 
2 34555 1 0 0 
#list of all DataFrames 
dfs = [df1, df2] 
print (pd.concat(dfs, ignore_index=True)) 
     0 1 2 3 
0 14254 1 1 1 
1 25445 2 1 2 
2 34555 3 1 0 
3 14254 1 1 1 
4 25445 0 0 2 
5 34555 1 0 0 

#select all columns without first 
print (pd.concat(dfs, ignore_index=True).ix[:,1:]) 
    1 2 3 
0 1 1 1 
1 2 1 2 
2 3 1 0 
3 1 1 1 
4 0 0 2 
5 1 0 0 

私は必要な平均の種類を確認していないので、私は追加両方:

#mean per rows 
print (pd.concat(dfs, ignore_index=True).ix[:,1:].mean(1)) 
0 1.000000 
1 1.666667 
2 1.333333 
3 1.000000 
4 0.666667 
5 0.333333 
dtype: float64 

#mean per columns 
print (pd.concat(dfs, ignore_index=True).ix[:,1:].mean()) 
1 1.333333 
2 0.666667 
3 1.000000 
dtype: float64 

たぶん、あなたは何か他のものが必要になります。

dfs = [df1.set_index(0), df2.set_index(0)] 
print (pd.concat(dfs, ignore_index=True, axis=1)) 
     0 1 2 3 4 5 
0      
14254 1 1 1 1 1 1 
25445 2 1 2 0 0 2 
34555 3 1 0 1 0 0 

print (pd.concat(dfs, ignore_index=True, axis=1).mean(1)) 
0 
14254 1.000000 
25445 1.166667 
34555 0.833333 
dtype: float64 

print (pd.concat(dfs, ignore_index=True, axis=1).mean()) 
0 2.000000 
1 1.000000 
2 1.000000 
3 0.666667 
4 0.333333 
5 1.000000 
dtype: float64 
関連する問題