2016-10-02 202 views
2

有沒有簡單的方法來計算一個熊貓DataFrame中的每一列的平均值,並且對於每一行排除的具體值?下面各行中的x標記要排除在計算在每次迭代中的值:Pandas DataFrame中每一行的平均函數排除值

a b      a b     a b 
0 1 2     0 x x    0 1 2 
1 2 4 first loop 1 2 4 second loop 1 x x etc. 
2 3 6  --->  2 3 6  --->  2 3 6 ---> 
3 4 8     3 4 8    3 4 8 
4 5 10     4 5 10    4 5 10 
          ____________    _____________ 
        col_avg: 3.5 7.0  col_avg: 3.25 6.5 

Using only 4 values at each iteration, as the "x" is excluded from data set 

造成了新的數據幀

a_x b_x 
0 3.5 7.0 
1 3.25 6.5 
2 3.0 6.0 
3 2.75 5.5 
4 2.5 5.0 

由於

/N

回答

3

要首先從第一步開始,假設我們有興趣進行求和而不是計算平均值。在這種情況下,我們會在除了當前元素之外的每個列上添加所有元素。其他看待它/解決這個問題的方法是將每個柱上的所有元素相加,然後減去當前的元素本身。因此,基本上我們可以得到df.sum(0)的所有列的總和,並簡單地從中減去df,保持軸 對齊。 Broadcasting會照顧到在所有列上一次執行這些操作。

爲了進行第二步平均,我們簡單地除以每個列的求和所涉及的元素的數量,即df.shape[0]-1

因此,我們將有一個量化的解決方案,像這樣 -

df_out = (df.sum(0) - df)/float(df.shape[0]-1) 

採樣運行 -

In [128]: df 
Out[128]: 
    a b 
0 1 2 
1 2 4 
2 3 6 
3 4 8 
4 5 10 

In [129]: (df.sum(0) - df)/float(df.shape[0]-1) 
Out[129]: 
     a b 
0 3.50 7.0 
1 3.25 6.5 
2 3.00 6.0 
3 2.75 5.5 
4 2.50 5.0 

要設置列名所需的,這樣做:df_out.columns = ['a_x','b_x']

+0

謝謝,完美的作品! 由於數據包含NaN值,因此需要使用df.count()而不是df_shape [0]計算「真」平均值,否則我會將NaN計爲實際值。然而,我沒有在問題中具體說明,而只是供參考。 – gussilago

相關問題