[英]Resampling pandas frame with function depending on column
我有一個反復出現的問題,我有一些數據幀,其中有些列是角度,而另一些則不是,我想以一種可以正確計算每種類型平均值的方式重新采樣。 這是一個小例子:
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)
上面的示例顯示了應用於所有列以獲得重采樣的兩種平均類型。
我可以定義一個使用列名來確定要應用於每個列的正確平均值的函數的好方法嗎?
通過調用apply
,可以將DataFrame的每一列作為Series-Object傳遞給指定的函數。 您可以通過.name
屬性獲取系列的名稱(即列名稱):
def conditionalMean(x):
if x.name == 'theta':
return angleMean(x)
else:
return x.mean()
print df.resample('1H').apply(conditionalMean)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.