2017-07-07 75 views
0

我有一個反覆出現的問題,其中有一些列是角度而其他不是的數據框,我想重新採樣,以便正確計算平均值每種類型。下面是一個小例子:重新採樣熊貓框架的功能取決於列

import pandas as pd 
import numpy as np 

def angleMean(x): 
    d2r = np.pi/180. 
    cosMean = np.mean(np.cos(x * d2r)) 
    sinMean = np.mean(np.sin(x * d2r)) 
    return np.arctan2(sinMean,cosMean)/d2r 

# Define data fame 
t = pd.date_range("00:00", "3:00", freq="30min") 
df = pd.DataFrame({'t':t,'x':[350.,0.,2.,4.,6.,8.,10.],'theta':[350.,0.,2.,4.,6.,8.,10.]}).set_index('t') 

# Using normal mean 
print df.resample('1H').mean() 

# Using angular mean 
print df.resample('1H').apply(angleMean) 

上面的例子顯示了應用於所有列的平均類型以獲得重採樣。

有沒有一種好方法可以定義一個函數,該函數使用列名來確定適用於每列的正確平均值?

+0

因此,換句話說,你想「專注」,像'angleMean(X,列)',其中代碼根據它所應用的'column',內部運行會有所不同? – mkos

回答

1

通過調用apply,可以將DataFrame的每一列作爲串聯對象傳遞給指定的函數。您可以通過.name屬性獲得系列(即列名稱)的名稱:

def conditionalMean(x): 
    if x.name == 'theta': 
    return angleMean(x) 
    else: 
    return x.mean() 

print df.resample('1H').apply(conditionalMean) 
+0

工作,謝謝! –